Обычным житейским представлением отношения является таблица,  заголовком которой является «схема отношения», а строками – величины кортежей отношения;  в этом случае имена атрибутов соответствуют именам столбцов данной таблицы. Поэтому иногда говорят про «столбцы таблицы», имея в виду «атрибуты отношения».

Конечно, это достаточно грубая терминология, поскольку у обычных таблиц и строки, и столбцы упорядочены, тогда как атрибуты и кортежи отношений являются элементами неупорядоченных множеств. Когда мы будем рассматривать  практические вопросы баз данных и средств управления, то будем использовать эту  терминологию. Подобной терминологии придерживаются в большинстве коммерческих реляционных СУБД. Иногда также используются термины файл как аналог таблицы, запись как аналог строки и поле как аналог столбца.

Контрольные вопросы.  1. Какова структура реляционных баз данных?  2. Типы данных и домены?  3.Перечислите основные понятия/термины реляционных баз данных?  4 Как связаны понятия реализационных моделей  и таблиц базы данных?  5. Сколько полей минимально может иметь одна таблица?

Резюме.

Лекция 12. Аннотация.  Ключи баз данных и нормализация баз.

Первичным ключом (ключом таблицы, ключевым атрибутом) называется атрибут (или множество атрибутов) которые, однозначно  идентифицируют  каждый из его кортежей (строк).  При вызове  конкретного значения атрибута – первичного ключа должна появится только одна строка.  На любой запрос мы  должны получить только один единственный ответ.  Других ответов  быть не может. Существование первичного ключа у любого значения отношения является следствием того  свойства отношений,  что тело отношения является неповторимым множеством кортежей.  Пусть К — несколько атрибутов  таблицы R.  Набор  К будет потенциальным ключом переменной-отношения R тогда и только тогда, когда оно обладает следующими свойствами:  а) Уникальность. Никакие допустимые значения отношения R не содержат двух различных кортежей с одинаковыми значениями атрибутов множества К.  б) Неизбыточность.  Никакое из составляющих  аргументов  множества К по отдельности не обладает свойством уникальности.

НЕ нашли? Не то? Что вы ищете?

Ключи используют для достижения следующих целей:  1) исключения дублирования  в ключевых атрибутах;  Если ключ выбран,  то никаких других ключей использовать  уже нельзя.  2) ускорения обращения к кортежам;  3) организации связывания таблиц.  4)Первичный ключ используется для идентификации записей в таблице.

Одна аналогия. Когда вы звоните в службу технической поддержки, оператор обычно просит вас назвать какой-либо номер (договора, телефона и пр.), по которому вас можно идентифицировать в системе.
Если вы забыли свой номер, то оператор службы технической поддержки попросит предоставить вас какую-либо другую информацию, которая поможет уникальным образом идентифицировать вас. Например, комбинация вашего дня рождения и фамилия. Они тоже могут являться первичным ключом, точнее их комбинация.  Значение первичного ключа может встретиться в столбце, атрибут которого выбран в качестве первичного ключа, только один раз.

Составные первичные ключи.
Часто первичный ключ состоит из одного поля, но он может быть и комбинацией нескольких столбцов, например, двух (трех, четырех…). Но вы помните, что первичный ключ всегда уникален, а значит нужно, чтобы комбинация n-го количества полей  была уникальна.

Поле первичного ключа часто  создаётся и используется самой базой данных. Вы можете, условно, сказать базе данных, чтобы она сама автоматически присваивала уникальное числовое значение каждой записи при ее создании. База данных, обычно, начинает нумерацию с 1 и увеличивает это число для каждой записи на одну единицу. Такой первичный ключ называется  автоинкрементным или авто нумерованным. Использование автоинкрементных ключей – хороший способ для задания уникальных первичных ключей. Классическое название такого ключа – суррогатный первичный ключ. Такой ключ не содержит полезной информации, относящейся к сущности (объекту) в таблице, поэтому он и называется суррогатным.

Часто пытаются сохранять информацию, которая кажется  родственной, в одной таблице. Можно, например, хранить информацию о заказах в таблице клиентов. Ведь заказы принадлежат клиентам, верно?  Нет. Клиенты и заказы представляют собой отдельные сущности в базе данных, у них много собственных свойств. То же самое  с заказами.  И тому и другому нужна своя собственная таблица для записи этих свойств.  А записи в этих двух таблицах могут быть связаны для того, чтобы установить связи  между ними. Проектирование базы данных – это решение вопросов:  1. определение того, какие сущности вы хотите хранить в ней;  2. какие связи между этими сущностями существуют.

Клиенты и заказы имеют связь (состоят в отношениях) один-ко-многим потому, что один клиент может иметь много заказов, но каждый конкретный заказ (их множество) оформлен (привязан) только с одним клиентом, имеет только одного клиента. Одно является важным – то, что для связи один-ко-многим необходимо две отдельные таблицы. Одна для клиентов, другая для заказов.

Таблица клиентов.  Атрибуты ниже – это минимальные блоки информации, которые относятся к клиентам:

customer_id (primary key) – идентификатор клиента.  first_name —  имя.  last_name — отчество.  address — адрес.  zip_code –  почтовый индекс.  country —  страна.  birth_date – дата рождения. username – регистрационное имя (логин) password – пароль.  Вот столько столбцов со своими названиями. Клиенты имеют свой набор сущностей.

Таблица заказа.  Вот сущности (минимум – минимум)  для заказа.  Аргументы таблицы.  order_id (primary key) – идентификатор заказа.  order_date – дата и время заказа. customer – клиент  заказа.

Здесь в столбце customer располагаются  номера - идентификатор клиента customer_id.

Эти две таблицы (клиентов и заказов) уже связаны потому, что поле customer в таблице заказов ссылается на первичный ключ (customer_id) таблицы клиентов. Такая связь называется связью по внешнему ключу. Вы можете представлять себе внешний ключ как простую копию (копию значения) первичного ключа другой таблицы. В нашем случае значение поля customer_id из таблицы клиентов копируется в таблицу заказов при вставке каждой записи о заказе. Таким образом, у каждый заказ привязан к клиенту. Заказов у каждого клиента может быть много, как и говорилось выше.

Повтор – определение.  Пусть в какой то таблице R2 имеется атрибут B, значения которого являются (входят в состав) значений Первичного ключа другой  таблицы R1.  Тогда говорят, что атрибут B отношения R2 есть внешний ключ (FK) .

Каждое значение внешнего ключа (FK) в текущем значении таблицы R2 должно обязательно совпадать со значением такого же атрибута из первичного ключа  какого-то из  кортежей в текущем значении таблицы R1.  Если значение атрибута появилось  в таблице R2, то и в таблице R1 будет  строка,  в которой присутствует  это значение атрибута.

Базы данных представляют собой скопление различных таблиц, как будто не связанных друг с другом. Но наличие в этих таблицах хотя бы по одному связывающему элементу (внешнему ключу) позволяет просматривать новые порции информации о новых сущностях.  Внешние ключи позволяют вызывать  новые таблицы с дополнительной информацией о связях с другими  элементами базы данных.

Фактически базы данных и придуманы для того чтобы связывать  различные таблицы с разной информацией, которые увязаны только одним ключевым словом, в которых данные рассматриваются с различных часто неожиданных точек зрения. И происходит это с помощью  Внешних ключей.  Причем выборка  происходит автоматически без трудоёмких поисков и сравнений.  Пример  вызова дополнительных таблиц по внешним ключам посмотрим в одной обучающей лекции.  WEB/разное/ лекция 2. В нижней таблице есть составной первичный ключ.  Его аргументы, используемые как внешние  ключи, позволяют получить ещё две таблицы с новой информацией, которой нет в исходной таблице. 

Связывание таблиц.  Вы задаёте вопрос: “Как я могу увидеть, что поле customer в таблице заказов ссылается на поле customer_id в таблице клиентов”.  Вы не можете сделать этого потому, что я еще не показал вам как создать связь.
Ниже – окно SQLyog с окном, которое я использовал для создания связи между таблицами. Пример создания связи по внешнему ключу между таблицами заказов и клиентов. В окне ниже вы можете видеть, как поле customer таблицы заказов слева связывается с первичным ключом (customer_id) таблицы клиентов справа. Foreign key – Внешний ключ. Source Column – столбец источника.  Primary key –первичный ключ. Target Column –столбец цели. Referenced table – ссылочная (соединительная) таблица.

Выбираем атрибут в текущей таблице  и привязываем соответствующий ему атрибут первичного ключа  в ссылочной таблице. Нажимаем «Create».

Теперь, когда вы посмотрите на данные, которые могли бы быть в таблицах, вы увидите, что две таблицы связаны. Заказы связаны с клиентами через поле customer, которое ссылается на таблицу клиентов.

На изображении вы видите, что клиент mary поместила три заказа, клиент pablo поместил один, а клиент john – ни одного.
Вы спросите: “А что же именно заказали все эти люди?” Вы возможно ожидали увидеть заказанные товары в таблице заказов. Но это был бы плохой пример проектирования.  Товары – это отдельные сущности, которые должны храниться в отдельной таблице. И связь между таблицами заказов и товаров будет являться связью один-ко-многим.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15