Файл: Базы данных Учебное пособие.pdf

Добавлен: 28.11.2018

Просмотров: 7015

Скачиваний: 47

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

31 

ния.  Если первичный  ключ  состоит  из  минимального  набора  атрибутов,  то он 
не избыточный

Функции первичного ключа: 
1. Исключение дублирования записей. Значение первичного ключа должно 

быть  уникально.

 

В случае,  когда первичный  ключ  составной  значения  отдель-

ных  атрибутов  ключа  могут  совпадать,  однако  комбинация  всех  атрибутов 
должна быть  уникальна.  В качестве  примера  в  таблице 2.3  приведено отноше-
ние «Ведомость», в котором первичным ключом служит комбинация атрибутов 
(Студент,  Предмет).  В данном  отношении  отдельные  атрибуты  ключа  могут 
дублироваться,  ведь  один  и  тот  же  предмет  могут  сдавать  многие  студенты  и 
каждый  студент  обычно  сдает  более  одного  предмета.  Однако  в  таблице  ни  в 
коем случае не должна встречаться ситуация, когда один и тот же студент по-
лучил  две  оценки  по  одному  и  тому  же  предмету.  Если  при  проектировании 
необходимо будет учесть ситуации возможной сдачи одним студентом одного и 
того же предмета несколько раз, тогда в состав первичного ключа необходимо 
дополнительно добавить дату сдачи экзамена. 

Таблица 2.3 – Отношение «Ведомость» 

Студент (ПК) 

Предмет (ПК)  Дата сдачи экзамена  Оценка 

Иванов Сергей Петрович 

Базы данных 

14.06.2016 

Петров Иван Сергеевич 

Базы данных 

14.06.2016 

Иванов Сергей Петрович 

Информатика 

18.06.2016 

Петров Иван Сергеевич 

Информатика 

18.06.2016 

Отметим  также,  что  за  ситуацию  дублирования  значений  первичного 

ключа отвечает сама СУБД, и в случае возникновения подобных ситуаций про-
цессор СУБД выдаст соответствующее сообщение, например о невозможности 
добавления новой записи. 

2.  Индексирование  и  сортировка.  Для  каждого  первичного  ключа  по 

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


background image

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

Машиностроение

МС


background image

33 

В данном примере приведено связывание двух отношений – «Студент» и 

«Группа». Первичным ключом в отношении «Студент» является атрибут «Но-
мер», а в отношении «Группа» – атрибут «Группа». Кроме того, в отношении 
«Студент»  имеется  ещё  один  выделенный  атрибут  –  атрибут  «Группа».  Как 
видно из рисунка, значения данного атрибута являются значениями первичного 
ключа отношения «Группа», следовательно, согласно определению, данный ат-
рибут и является внешним ключом. 

На внешние ключи при связывании накладываются некоторые ограниче-

ния, например для каждого значения внешнего ключа в таблице должна обяза-
тельно присутствовать так называемая связанная запись в исходной таблице с 
соответствующим значением. Иными словами, в приведенном примере в отно-
шении «Студент» не должно быть записи о студенте с номером группы, кото-
рая отсутствует в отношении «Группа». 

2.3 Связи в БД 

В любой предметной области отдельные объекты или сущности не суще-

ствуют сами по себе. В большинстве случаев они связаны с другими объектами, 
а эти связи строятся на основе простых глагольных фраз. Например, «Студент 
Иванов обучается в группе 116» или «Студент Иванов изучает информатику». 
Вид связи между сущностями можно определить, сопоставив, какое количество 
экземпляров одной сущности связано или зависит от одного или нескольких эк-
земпляров другой сущности.  

Как уже отмечалось выше, связи между отношениями в самой базе дан-

ных реализуются с помощью первичных и внешних ключей. Далее будут рас-
смотрены  следующие  существующие  взаимосвязи  между  объектами  предмет-
ной области и их реализация в реляционной модели данных: 

•  один-к-одному; 

•  один-ко-многим; 

•  многие-ко-многим. 

2.3.1 Связь «один-к-одному» 

Самый простой вид связи – один-к-одному, обозначается как 1:1.  

 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·   

Связь  «один-к-одному»  означает,  что  каждому  экземпляру 

первой  сущности  соответствует  только  один  экземпляр  второй 


background image

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


background image

35 

Таким образом, в рассматриваемом примере связь «один-к-одному» меж-

ду  сущностями  «Студент»  и  «Паспорт»  в  большинстве  случаев  логично  было 
бы реализовать  в  виде одной  таблицы  со  всеми  атрибутами  обеих  сущностей, 
как в таблице 2.4. В качестве первичного ключа объединенной сущности можно 
выбрать  любой  из  двух  ключей  двух  отношений.  В дальнейшем  с  помощью 
стандартных запросов к базе данных пользователь может сформировать исход-
ные отношения «Студент» и «Паспорт», попросту исключив из запроса ненуж-
ные атрибуты. 

Таблица 2.4 – Отношение «Студент» 

Номер 

(ПК) 

ФИО 

Группа 

Дата  

рождения  Серия 

Номер 

паспорта 

Дата  

выдачи 

Иванов Сер-

гей Петрович 

116 

14.05.1988 

6903 

234235 

18.05.2013 

Петров Иван 

Сергеевич 

598 

27.01.1989 

6904 

267323 

29.01.2014 

Алексеев Се-

мен Олегович 

445 

05.10.1993 

6903 

432567 

08.10.2013 

Белов Петр 

Иванович 

116 

01.11.1988 

6905 

234561 

17.11.2015 

Тем  не  менее,  существуют  некоторые  причины,  по  которым  единый 

набор данных со всеми атрибутами не всегда объединяют в одну большую таб-
лицу, а разбивают на две со связью «один-к-одному». В случае необходимости 
защитить конфиденциальную информацию от части пользователей может воз-
никнуть  необходимость  разбить  предлагаемые  данные  на  2 таблицы  с  различ-
ным  уровнем  доступа  к  ним  разных  пользователей.  В некоторых  ситуациях 
таблицы разбивают на несколько частей для ускорения доступа к наиболее ча-
сто используемым в работе данным. Кроме того, в некоторых случаях органи-
зации данных, когда единая таблица может содержать большое количество пу-
стых строк, разделение может приводить и к экономии памяти. 

2.3.2 Связь «один-ко-многим» 

Данный вид связи обозначается 1:М.  

 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·   

Связь «один-ко-многим» означает, что каждому экземпляру 

первой сущности может соответствовать несколько экземпляров