Обычным житейским представлением отношения является таблица, заголовком которой является «схема отношения», а строками – величины кортежей отношения; в этом случае имена атрибутов соответствуют именам столбцов данной таблицы. Поэтому иногда говорят про «столбцы таблицы», имея в виду «атрибуты отношения».
Конечно, это достаточно грубая терминология, поскольку у обычных таблиц и строки, и столбцы упорядочены, тогда как атрибуты и кортежи отношений являются элементами неупорядоченных множеств. Когда мы будем рассматривать практические вопросы баз данных и средств управления, то будем использовать эту терминологию. Подобной терминологии придерживаются в большинстве коммерческих реляционных СУБД. Иногда также используются термины файл как аналог таблицы, запись как аналог строки и поле как аналог столбца.
Контрольные вопросы. 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 |


