СВЯЗИ МЕЖДУ ОТНОШЕНИЯМИ БД

План лекции

1.  Основные понятия и определения

2.  Разновидности бинарных связей

3.  Понятие первичного и внешнего ключа

Рекомендуемая литература:

Т. Конноли. Базы данных. Проектирование, реализация и сопровождение. Теория и практика.: Пер. с англ. – М.: Изд. дом «Вильямс», 2006. – 1440 с.

1 Основные понятия и определения

Между отношениями БД могут быть установлены связи или ассоциации, показывающие, каким образом отношения соотносятся или взаимодействуют между собой.

Степень связи – количество типов отношений, которые охвачены данной связью.

Между отношениями предметной области могут иметь место:

−  бинарные связи (между двумя отношениями или между отношением и ем же самим - рекурсивная связь),

−  тренарные связи (между тремя отношениями),

−  и в общем случае - n-арные связи.

На практике чаще всего встречаются связи со степенью два, то есть бинарные связи.

В изображенном на рисунке примере бинарной связи, связь между отношениями БИЛЕТ и ПАССАЖИР связывает билеты и пассажиров. Конец связи с именем "для" позволяет связывать с одним пассажиром более одного билета, причем каждый билет должен быть связан с каким-либо пассажиром. Конец связи с именем "имеет" означает, что каждый билет может принадлежать только одному пассажиру, причем пассажир не обязан иметь хотя бы один билет.

Лаконичной устной трактовкой изображенной диаграммы является следующая:

·  Каждый БИЛЕТ предназначен для одного и только одного ПАССАЖИРА;

·  Каждый ПАССАЖИР может иметь один или более БИЛЕТОВ.

Рекурсивная связь – связь, в которой одни и те же отношения участвуют несколько раз в разных ролях.

На следующем примере изображена рекурсивная связь, связывающая отношение ЧЕЛОВЕК с ним же самим. Конец связи с именем "сын" определяет тот факт, что у одного отца может быть более чем один сын. Конец связи с именем "отец" означает, что не у каждого человека могут быть сыновья.

Лаконичной устной трактовкой изображенной диаграммы является следующая:

·  Каждый ЧЕЛОВЕК является сыном одного и только одного ЧЕЛОВЕКА;

·  Каждый ЧЕЛОВЕК может являться отцом для одного или более ЛЮДЕЙ ("ЧЕЛОВЕКОВ").

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

Разновидности бинарных связей

Среди бинарных связей существуют три фундаментальных вида связи:

−  один к одному (1:1),

−  один ко многим (1:M),

−  многие ко многим (M:N).

Связь один к одному (1:1) существует, когда один экземпляр одного отношения связан с единственным экземпляром другого отношения (студент может не "получать" стипендию, а может получать).

Связь один ко многим (1:M) существует, когда один экземпляр одного отношения связан с одним или более экземпляром другого отношения и каждый экземпляр второго отношения связан только с одним экземпляром первого отношения (квартира может пустовать, в ней может жить один или несколько жильцов).

Например, если у нас есть связь между отношением «Студент» и отношением «Преподаватель» и эта связь - руководство дипломными проектами, то каждый студент имеет только одного руководителя, но один и тот же преподаватель может руководить множеством студентов-дипломников. Поэтому это будет связь «один-ко-многим» (1:М), один со стороны «Преподаватель» и многие со стороны «Студент».

Пример связи «один-ко-многим» при связывании отношений «Студент» и «Преподаватель»

Связь многие ко многим (М:N) существует, когда один экземпляр одного отношения связан с одним или более экземпляром другого отношения и каждый экземпляр второго отношения связан с одним или более экземпляром первого отношения.

Например, если мы рассмотрим связь типа «Изучает» между отношениями «Студент» и «Дисциплина», то это связь типа «многие-ко-многим» (М:М), потому что каждый студент может изучать несколько дисциплин, но и каждая дисциплина изучается множеством студентов.

Пример моделирования связи «многие-ко-многим»

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

Пример преобразования связи показан на рис..

 

а)

б)

Рис Преобразование связи многие-ко-многим

а) до преобразования; б) после преобразования.

Между двумя отношениями может быть задано сколько угодно связей с разными смысловыми нагрузками. Например, между двумя отношениями «Студент» и «Преподаватель» можно установить две смысловые связи, одна — рассмотренная уже ранее «Дипломное проектирование», а вторая может быть условно названа «Лекции», и она определяет, лекции каких преподавателей слушает данный студент и каким студентам данный преподаватель читает лекции. Ясно, что это связь типа многие-ко-многим. Пример этих связей приведен на рисунке.

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

Рассмотрим для этого ранее приведенный пример связи «Дипломное проектирование». На нашем рисунке эта связь интерпретируется как необязательная с двух сторон. Но ведь на самом деле каждый студент, который пишет диплом, должен иметь своего руководителя дипломного проектирования, но, с другой стороны, не каждый преподаватель должен вести дипломное проектирование. Поэтому в данной смысловой постановке изображение этой связи изменится и будет выглядеть таким, как представлено на рисунке.

Пример обязательной и необязательной связи между отношениями «Студент» и «Преподаватель»

3 Понятие первичного и внешнего ключа

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

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

Первичный ключ по определению уникален: в таблице не может быть двух разных строк с одинаковыми значениями первичного ключа. Столбцы, составляющие первичный ключ, не могут иметь значение NULL. Для каждой таблицы первичный ключ может быть только один.

Нецелесообразно использовать ключи с длинными текстовыми значениями (предпочтительнее использовать целочисленные атрибуты).

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

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

Внешний ключ (foreign key) - это столбец или группа столбцов, ссылающиеся на столбец или группу столбцов другой таблицы. Таблица, в которой находится внешний ключ называется дочерней. Таблица, на которую ссылается внешний ключ, называется родительской таблицей, а столбцы, на которые ссылается внешний ключ - родительским ключом. Родительский ключ должен быть первичным или уникальным ключом, значения же внешнего ключа могут повторяться хоть сколько раз. То есть с помощью внешних ключей поддерживаются связи "один ко многим". Типы данных (а в некоторых СУБД и размерности) соответствующих столбцов внешнего и родительского ключа должны совпадать.

И самое главное. Все значения внешнего ключа должны совпадать с каким-либо из значений родительского ключа.

Таблица «Телефоны»

Таблица «Справочник улиц»

(дочерняя)

родительская

PK № телефона

PK Код улицы

ФИО владельца

Наименование

FK Код улицы

№ дома

№ квартиры