Пример проектирования с использованием связей более высокого порядка
Правило 7
В случае многосторонней связи (N- сторонней) необходимо использовать N+1 отношение, по одному на каждую сущность, причем ключами в этих отношениях будут ключи соответствующих сущностий. В последнем отношении будет хранится информация о связи. В него включаются ключевые атрибуты всех сущностей охваченных N–сторонней связью. Ключ в данном отношении выбирается после анализа всех атрибутов.
Если применить правило номер 7 к рассмотренному на рисунке 7.51 примеру, то мы получим следующие отношения:
Проводник (Фам,…)
Озеро (Озеро,…)
Рыба (Вид,…)
П_О_Р (Фам, Озеро, Вид,…) – первичный ключ не может быть определен до тех пор, пока не будут рассмотрены все другие атрибуты.
Если взять атрибуты из примера, то П_О_Р будет выглядеть: П_О_Р (Пфам, Нозеро, вид), то есть в данное отношение не будут добавленны дополнительные атрибуты.
Если каждый проводник предпочитает ловить в каждом озере только один вид рыбы, то
П_О_Р (Фам, Озеро, Вид). Если проводник может указать несколько предпочтительных видов для каждого озера, то П_О_Р (Фам, Озеро, Вид).
Если проводник мог бы указать время года когда он предпочтитает данный вид рыбы в каждом озере, то тогда набор атрибутов <Фам, Озеро, Вид> не мог бы быть первичным ключом, так как возможны были бы подобные кортежи:
<Иванов, Ладога, Лещь, Осень> Иванов предпочитает ловить осенью в Ладоге леща.
<Иванов, Ладога, Лещь, Лето> Иванов предпочитает ловить летом в Ладоге леща.
В некоторых ситуациях одних сущностей и связей может оказаться недостаточно для полноценного моделирования предметной области. Одна из таких ситуаций возникает тогда, когда экземпляры некоторой сущности должны играть разные роли в деятельности предприятия.
В качестве примера предположим, что для небольшого предприятия-поставщика автомобилей необходимо хранить информацию о производственном персонале. Различают две категории служащих: Мастеров и Сборщиков. Мастера получают фиксированный оклад, в то время как у сборщиков почасовая оплата. Мастера руководят процессом сборки. У каждый мастера в подчинении от 1 до N сборщиков. У каждого сборщика должен быть только один руководитель.
Определим атрибуты представляющие для нас интерес:
Слфам
-
фамилия служащего
Ртел
-
рабочий телефон мастера
Дтел
-
домашний телефон служащего
Адр.сл.
-
адрес служащего
Тставка
-
почасовая тарифная ставка сборщика
Оклад
-
Месячный оклад мастера
Код.сб.
-
Код сборщика
Сф.ком
-
сфера компетенции мастера
Построим Диаграмма ER-типа связи “Руководит” соединяющей две сущности Мастер и Сборщик:
Правило 4
Рис. 7.52 Диаграмма ER-типа связи “Руководит”
По диаграмме ER-типа связи “Руководит” отображенной на рисунке 7.52 формируем отношения используя правило 6
Мастер (Таб.ном.маст.,…)
Сборщик (Таб.ном.сборщ.,…,Таб.ном.маст.)
С этой моделью связана проблема. Она возникает при распределени неключевых атрибутов по предварительным отношениям.
К отнощению Мастер можно однозначно отнести: Ртел, Оклад, Сф.ком.
К отнощению Сборщик можно однозначно отнести: Тставка, Код.сб.
Легко распределить почти все атрибуты, кроме Слфам, Дтел и Адр.сл.
С оставшимися атрибутами можно поступить следующим образом: разбить общие атрибуты на две части для Мастера и Сборщика, т.е. Слфам служащего = Слфам Мастера и Слфам Сборщика.
Рис. 7.53 Разбиение общих атрибутов Слфам, Дтел и Адр на две части
Но количество атрибутов увеличивается, следовательно, возникнет дублирование.
Лучшим решением данной ситуации является следующее:
· Все Мастера и Сборщики рассматриваются как служащие
· Мастера и Сборщики это те роли, которые может играть данный служащий (некоторые служащие являются Мастерами, другие Сборщиками).
· Служащий представляет собой сущность, ключом которой является табельный номер служащего (ТНС), а экземплярами данной сущности могут быть либо мастера, либо сборщики.
· Два ролевых набора Мастер и Сборщик соединяются связью “Руководит”.
На рисунке 7.54 показано использование ролей для данного примера
Правило 4
Рис. 7.54 Диаграмма ER-типа связи “Руководит” с использованием ролей
Стрелки идущие от сущности Служащий к сущностям Мастер и Сборщик, указывают на то, что сущность Служащий является исходной, а сущности Мастер и Сборщик только ролями.