ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 7738
Скачиваний: 53
31
ния. Если первичный ключ состоит из минимального набора атрибутов, то он
не избыточный.
Функции первичного ключа:
1. Исключение дублирования записей. Значение первичного ключа должно
быть уникально.
В случае, когда первичный ключ составной значения отдель-
ных атрибутов ключа могут совпадать, однако комбинация всех атрибутов
должна быть уникальна. В качестве примера в таблице 2.3 приведено отноше-
ние «Ведомость», в котором первичным ключом служит комбинация атрибутов
(Студент, Предмет). В данном отношении отдельные атрибуты ключа могут
дублироваться, ведь один и тот же предмет могут сдавать многие студенты и
каждый студент обычно сдает более одного предмета. Однако в таблице ни в
коем случае не должна встречаться ситуация, когда один и тот же студент по-
лучил две оценки по одному и тому же предмету. Если при проектировании
необходимо будет учесть ситуации возможной сдачи одним студентом одного и
того же предмета несколько раз, тогда в состав первичного ключа необходимо
дополнительно добавить дату сдачи экзамена.
Таблица 2.3 – Отношение «Ведомость»
Студент (ПК)
Предмет (ПК) Дата сдачи экзамена Оценка
Иванов Сергей Петрович
Базы данных
14.06.2016
4
Петров Иван Сергеевич
Базы данных
14.06.2016
5
Иванов Сергей Петрович
Информатика
18.06.2016
4
Петров Иван Сергеевич
Информатика
18.06.2016
4
Отметим также, что за ситуацию дублирования значений первичного
ключа отвечает сама СУБД, и в случае возникновения подобных ситуаций про-
цессор СУБД выдаст соответствующее сообщение, например о невозможности
добавления новой записи.
2. Индексирование и сортировка. Для каждого первичного ключа по
умолчанию создается соответствующий индекс, позволяющий ускорять в даль-
нейшем поиск записей в базе данных, а также производить сортировку записей
по первичному ключу. Как уже отмечалось выше, очень часто первичный ключ
дополнительно снабжен функцией счетчика, т. е. каждая следующая добавляе-
мая в отношение запись автоматически получает следующее по порядку значе-
ние в поле первичного ключа.
32
3. Связывание таблиц – это важнейшая функция первичного ключа, поз-
воляющая организовать связь между двумя таблицами. Однако для изучения
данной функции рассмотрим сначала термин «внешний ключ».
Внешний ключ
Связывание таблиц помимо термина «первичный ключ» неотъемлемо
включает в себя и понятие «внешний ключ» (ВК), которое также играет одну из
важнейших ролей в реляционной модели данных.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Внешний ключ (Foreign Key, FK) – это атрибут или набор
атрибутов отношения, значения которого являются значениями
первичного ключа другого отношения, связанного с этим.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
С помощью первичных и внешних ключей в реляционной модели произ-
водят связывание отношений друг с другом. Это делается прежде всего для то-
го, чтобы наиболее рациональным образом разместить информацию в базе дан-
ных. Рассмотрим организацию связывания отношений на рисунке 2.1.
Рис. 2.1 – Связывание отношений «Студент» и «Группа»
Номер (ПК) ФИО
Группа (ВК) Дата рождения
1
Иванов Сергей Петрович
116
14.05.1988
2
Петров Иван Сергеевич
598
27.01.1989
«Студент»
Группа (ПК) Специальность
Факультет
116
Электронная техника
ЭТ
445
Менеджмент
Эконом.
«Группа»
3
Алексеев Семен Олегович
445
05.10.1993
4
Белов Петр Иванович
116
01.11.1988
598
Информационные системы
ВС
677
Машиностроение
МС
33
В данном примере приведено связывание двух отношений – «Студент» и
«Группа». Первичным ключом в отношении «Студент» является атрибут «Но-
мер», а в отношении «Группа» – атрибут «Группа». Кроме того, в отношении
«Студент» имеется ещё один выделенный атрибут – атрибут «Группа». Как
видно из рисунка, значения данного атрибута являются значениями первичного
ключа отношения «Группа», следовательно, согласно определению, данный ат-
рибут и является внешним ключом.
На внешние ключи при связывании накладываются некоторые ограниче-
ния, например для каждого значения внешнего ключа в таблице должна обяза-
тельно присутствовать так называемая связанная запись в исходной таблице с
соответствующим значением. Иными словами, в приведенном примере в отно-
шении «Студент» не должно быть записи о студенте с номером группы, кото-
рая отсутствует в отношении «Группа».
2.3 Связи в БД
В любой предметной области отдельные объекты или сущности не суще-
ствуют сами по себе. В большинстве случаев они связаны с другими объектами,
а эти связи строятся на основе простых глагольных фраз. Например, «Студент
Иванов обучается в группе 116» или «Студент Иванов изучает информатику».
Вид связи между сущностями можно определить, сопоставив, какое количество
экземпляров одной сущности связано или зависит от одного или нескольких эк-
земпляров другой сущности.
Как уже отмечалось выше, связи между отношениями в самой базе дан-
ных реализуются с помощью первичных и внешних ключей. Далее будут рас-
смотрены следующие существующие взаимосвязи между объектами предмет-
ной области и их реализация в реляционной модели данных:
• один-к-одному;
• один-ко-многим;
• многие-ко-многим.
2.3.1 Связь «один-к-одному»
Самый простой вид связи – один-к-одному, обозначается как 1:1.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Связь «один-к-одному» означает, что каждому экземпляру
первой сущности соответствует только один экземпляр второй
34
сущности, и наоборот, каждому экземпляру второй сущности со-
ответствует только один экземпляр первой.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Также возможен вариант, когда для некоторых экземпляров сущности
может не существовать связного экземпляра другой сущности, в таком случае
связь называется необязательной.
Для реализации связи 1:1 между таблицами в базе данных необходимо
произвести связывание их первичных ключей.
В качестве примера рассмотрим две сущности: «Студент» и «Паспорт»,
реализованные в виде таблиц БД на рисунке 2.2. Очевидно, что связь между
двумя сущностями является связью «один-к-одному», поскольку у одного сту-
дента может быть только один паспорт, и у каждого паспорта имеется только
один хозяин.
Рис. 2.2 – Пример связи 1:1 между таблицами
В данном случае необходимо произвести связывание первичных ключей
обоих отношений между собой.
На самом деле с точки зрения правильной организации базы данных хра-
нить данные двух отношений со связью 1:1 целесообразнее в единой большой
таблице, нежели в двух предлагаемых. Это позволит сэкономить место в памя-
ти, а также упростит работу с запросами к БД.
Номер (ПК) ФИО
Группа
Дата рождения
1
Иванов Сергей Петрович
116
14.05.1988
2
Петров Иван Сергеевич
598
27.01.1989
3
Алексеев Семен Олегович
445
05.10.1993
4
Белов Петр Иванович
116
01.11.1988
Номер (ПК)
Номер паспорта
Дата выдачи
1
234235
18.05.2013
2
267323
29.01.2014
3
432567
08.10.2013
4
234561
17.11.2015
Серия
6903
6904
6903
6905
35
Таким образом, в рассматриваемом примере связь «один-к-одному» меж-
ду сущностями «Студент» и «Паспорт» в большинстве случаев логично было
бы реализовать в виде одной таблицы со всеми атрибутами обеих сущностей,
как в таблице 2.4. В качестве первичного ключа объединенной сущности можно
выбрать любой из двух ключей двух отношений. В дальнейшем с помощью
стандартных запросов к базе данных пользователь может сформировать исход-
ные отношения «Студент» и «Паспорт», попросту исключив из запроса ненуж-
ные атрибуты.
Таблица 2.4 – Отношение «Студент»
Номер
(ПК)
ФИО
Группа
Дата
рождения Серия
Номер
паспорта
Дата
выдачи
1
Иванов Сер-
гей Петрович
116
14.05.1988
6903
234235
18.05.2013
2
Петров Иван
Сергеевич
598
27.01.1989
6904
267323
29.01.2014
3
Алексеев Се-
мен Олегович
445
05.10.1993
6903
432567
08.10.2013
4
Белов Петр
Иванович
116
01.11.1988
6905
234561
17.11.2015
Тем не менее, существуют некоторые причины, по которым единый
набор данных со всеми атрибутами не всегда объединяют в одну большую таб-
лицу, а разбивают на две со связью «один-к-одному». В случае необходимости
защитить конфиденциальную информацию от части пользователей может воз-
никнуть необходимость разбить предлагаемые данные на 2 таблицы с различ-
ным уровнем доступа к ним разных пользователей. В некоторых ситуациях
таблицы разбивают на несколько частей для ускорения доступа к наиболее ча-
сто используемым в работе данным. Кроме того, в некоторых случаях органи-
зации данных, когда единая таблица может содержать большое количество пу-
стых строк, разделение может приводить и к экономии памяти.
2.3.2 Связь «один-ко-многим»
Данный вид связи обозначается 1:М.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Связь «один-ко-многим» означает, что каждому экземпляру
первой сущности может соответствовать несколько экземпляров