Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Краткий_Конспект_Лекций_БД.doc
Скачиваний:
104
Добавлен:
24.02.2016
Размер:
1.12 Mб
Скачать

1.4. Свойства связей

  1. Если каждый экземпляр сущности участвует, по крайней мере, в одном экземпляре связи, то такое участие этой сущности называется полным (или обязательным), в противном случае – неполным (или необязательным, частичным). Например, связь между сущностями СОТРУДНИК и ИНОСТРАННЫЙ ЯЗЫК. Некоторые СОТРУДНИКИ знают ИНОСТРАННЫЙ ЯЗЫК, но ни один из них не владеет более, чем одним ИНОСТРАННЫМ ЯЗЫКОМ. Есть некоторые СОТРУДНИКИ, которые не владеют ни одним ИНОСТРАННЫМ ЯЗЫКОМ. Естественно, что имеется много ИНОСТРАННЫХ ЯЗЫКОВ, которыми не владеет ни один из СОТРУДНИКОВ, а также, что некоторые из СОТРУДНИКОВ владеют одним и тем же ИНОСТРАННЫМ ЯЗЫКОМ. В данном случае участие обеих сущностей в связи является неполным.

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

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

  • «одинкодному» (1:1) (one-to-one relationship);

  • «одинкомногим» (1:N) (one-to-many relationship);

  • «многиекодному» (N:1) (many-to-one relationship);

  • «многиекомногим» (N:N) (many – to – many relationship).

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

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

На рис. 7.1 любой записи в таблице Автомобили в зависимости от значения поля тип соответствует запись либо в таблице Иномарки, либо в таблице Отечественные.

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

Или, например, если есть 2 сущности "Студент" и "Преподаватель" и связь между ними – руководство дипломными проектами, то каждый студент имеет только одного руководителя, но один и тот же преподаватель может руководить несколькими студентами-дипломниками (рис. 7.2).

рис. 7.1. Схема связи «один-к-одному».

рис. 7.2. Схема связи «один-ко-многим».

Связь "многие - к - одному" симметрична связи "один - ко - многим". Эти связи различаются только в том случае, когда учитывается их направление и одна из сущностей считается главной, а вторая подчиненной.

Связь "многие – ко - многим" в явном виде в реляционных БД не поддерживается. Однако имеется ряд способов косвенной реализации такой связи, которые с успехом возмещают ее отсутствие. Один из наиболее распространенных способов заключается во введении дополнительной сущности, строки которой состоят из внешних ключей, ссылающихся на первичные ключи двух сущностей. Такая сущность, предназначенная для представления взаимоотношений между двумя другими сущностями, называется составной. Например, имеются две таблицы: КЛИЕНТ и ГРУППА_ИНТЕРЕСОВ. Один человек может быть включен в различные группы, в то время как группа может объединять различных людей. Для реализации такой связи "многие – ко - многим" вводится дополнительная таблица, назовем ее КЛИЕНТЫ_В_ГРУППЕ, строка которой будет иметь два внешних ключа: один будет ссылаться на первичный ключ в таблице КЛИЕНТ, а другой - на первичный ключ в таблице ГРУППА_ИНТЕРЕСОВ. Таким образом, в таблицу КЛИЕНТЫ_В_ГРУППЕ можно записывать любое количество людей и любое количество групп.

Другим примером связи "многие – ко - многим" является следующий: имеются две таблицы: СТУДЕНТ и ПРЕПОДАВАТЕЛЬ и между ними установлена связь - лекции (рис. 7.3).Один студент слушает лекции разных преподавателей, а преподаватель читает лекции многим студентам.

рис. 7.3. Схема связи «многие-ко-многим».

Для реализации такой связи введем дополнительную сущность ЛЕКЦИИ (рис. 7.4).

рис. 7.4. Реализация связи «многие-ко-многим» в реляционной модели данных.

Инструмент связей – это средство представления сложных объектов, каждый из которых может рассматриваться как множество взаимосвязанных простых объектов. Деление на простые и сложные объекты, также как и характер взаимосвязи, является условным и определяется особенностями анализа предметной области, т. е. характером использования данных о предметах в решаемых прикладных задачах. При этом с точки зрения, например, конструктора, ДЕТАЛЬ является сложным объектом, а с точки зрения ПОСТАВЩИКА – простым.