Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Рекурсивная связь может быть только неидентифицирующей.




В противном случае внешний ключ должен был бы войти в со­став первичного ключа и получить при генерации схемы признак NOT NULL. Это сделало бы невозможным построение иерархии - у дерева под­чиненности должен быть корень - сотрудник, который никому не подчиняется. ­

Связь руководит/подчиняется позволяет хранить древовидную иерархию подчиненности сотрудников. Такой вид рекурсивной связи называется иерархической рекурсией (hierarchical recursion) и задает связь, когда руководитель (экземпляр родительской сущности) может иметь множество подчиненных (экземпляров дочерней сущности), но подчинен­ный имеет только одного руководителя.

Иерархическая связь Руководит/Подчиняется

Другим видом рекурсии является сетевая рекурсия (network recursion), когда руководитель может иметь множество подчиненных и, наоборот, подчиненный может иметь множество руководителей.

Сетевая рекурсия за­дает паутину отношений между экземплярами родительской и дочерней сущностей. Это случай, когда сущность находится сама с собой в связи "многие ко многим".

 

 

Руководит.1

Подчиняется.2

 

Руководит.2

Подчиняется.3

 

Руководит.3

Подчиняется.1

 

Руководит.2

Подчиняется.4

……………………………………………..

 

На рис. рассмотрен другой пример реализации сетевой рекурсии. Струк­тура моделирует родственные отношения между членами семьи любой сложности.

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

Рис. 52. Пример реализации сетевой рекурсии.

 

Если атрибут мигрирует в качестве внешнего ключа более чем на один уровень, то на первом уровне отображается полное имя внешнего ключа (имя роли + базовое имя атрибута), на втором и более - только имя роли.

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

Атрибут внешнего ключа Номер команды сущности Игрок имеет имя роли В какой команде играет. На следующем уровне, в сущности Гол, отображается только имя роли соответствующего атрибута внешнего ключа (В какой команде играет).

Рис. Пример миграции имен ролей.

 

Правила ссылочной целостности (RI - referential integrity) – правила определяющие, что произойдет в случае, если будут произведены изменения в родительской или дочерней сущности: добавление (INSERT), обновление (UPDATE), удаление (DELETE). Правила ссылочной целостности позволяют избежать «висячих» данных и позволяют придерживаться бизнес правил.

Связь "многие ко многим"

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

Рис. Пример связи «многие ко многим».

 

Связь "многие ко многим" должна именоваться двумя фразами - в обе стороны (в примере "лечит/лечится у"). Это облегчает чтение диаграм­мы. Связь на рисунке следует читать так: Врач <лечит> Пациента, Пациент <лечится у> Врача.

Для разрешения связи "многие ко многим" необходимо создать новую сущность.

На физическом уровне связь "многие ко многим" должна быть преобразована. По умолчанию при переходе к физическому уровню ERwin DM автоматически не преобразует связь "многие ко мно­гим", и на физическом уровне диаграмма выглядит так же, как и на логическом. Однако при генерации схемы такая связь игнорируется.

 

Для преобразования связи "многие ко многим" необходимо выполнить специальное преобразование в ERwin (Мастер трансформаций - Many-To-Many Transform Wizard, состоящий из 4 шагов-диалогов).

На втором и третьем шаге следует задать имя вновь создаваемой таблицы и имя преобразования. Преобразование связи включает создание новой таблицы и двух новых связей "один ко многим" от старых к новой таблице (рисунок). При этом имя новой таблице присваивается как Имя1_Имя2.

Рис. Пример автотрансформации связи «многие ко многим».

Описанного выше решения проблемы связи «многие ко многим» не всегда оказывается достаточно.

В примере таблица Врач_Пациент имеет смысл ви­зита к врачу, поэтому ее следует переименовать согласно бизнес-логике в Посещение.

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

 

После переименования таблицы на физи­ческом уровне на логическом уровне представление модели не изменится.

Рис. Пример дополнения физического уровня модели после трансформации связи «многие ко многим».


Поделиться:

Дата добавления: 2015-09-14; просмотров: 229; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты