Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
t42_Методич_пос_часть2.doc
Скачиваний:
40
Добавлен:
26.08.2019
Размер:
4.57 Mб
Скачать

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

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

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

Для внесения связи следует установить курсор на кнопке на панели инструментов ERwin, щелкнуть по одной, затем по другой сущности.

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

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

Для преобразования связи "многие ко многим" необходимо щелкнуть по связи правой кнопкой мыши и выбрать пункт меню Create Association Table или выбрать связь и щелкнуть по инструменту на панели трансформаций ERwin Transform Toolbar (см. табл. 5). (Подробнее операции преобра­зования будут рассмотрены разделе «Трансформации».) Появляется Мастер трансформаций - Many-To-Many Transform Wizard, состоящий из 4 шагов-диалогов. Для перехода к следующему шагу надо щелкнуть по кнопке Next (Далее). На втором и третьем шаге следует задать имя вновь создаваемой таблицы и имя преобразования. Преобразование связи включает создание новой таблицы и двух новых связей "один ко многим" от старых к новой таблице (рис.56). При этом имя новой таблице присваивается как Имя1_Имя2.

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

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

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

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

Типы зависимых сущностей

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

Характеристическая - зависимая дочерняя сущность (рис.58), которая связана только с одной родительской и по смыслу хранит информа­цию о характеристиках родительской сущности.

Рис. 58. Пример характеристической сущности «Хобби».

Ассоциативная - сущность, связанная с несколькими родительскими сущностями. Такая сущность содержит информацию о связях сущностей. Примером ассоциативной сущности является Посещение на рис. 57.

Именующая - частный случай ассоциативной сущности, не имеющей собственных атрибутов (только атрибуты родительских сущностей, мигри­ровавших в качестве внешнего ключа). Примером именующей сущности яв­ляется Врач_Пациент на рис. 56.

Категориальная - дочерняя сущность в иерархии наследования (см. ниже).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]