BPwin и Erwin. CASE-средства для разработки информационных систем - Маклаков Сергей Владимирович. Страница 22
Задать мощность связи между сущностями Команда и Игрок, равную "One or more" - 1 или более (тип Р). Предполагается, что установлена идентифицирующая связь.
Присвоить действие RI-триггера "Parent Insert-CASCADE" для того, чтобы при создании новой строки в таблице Команда автоматически создавалась хотя бы одна строка в дочерней таблице Игрок.
Присвоить связи действие RI-триггера "Parent Delete-CASCADE" для того, чтобы при удалении строки из таблицы Команда соответствующая строка или строки из таблицы Игрок тоже удалялись.
ERwin автоматически присваивает каждой связи значение ссылочной целостности, устанавливаемой по умолчанию, прежде чем добавить ее в диаграмму. Режимы RI, присваиваемые ERwin по умолчанию (приведены в табл. 2.4), могут быть изменены в редакторе Referential Integrity Default, который вызывается, если щелкнуть по кнопке RI Defaults диалога Target Server (меню Server/Target Server).
Таблица 2.4. Значения RI, присваиваемые в ERwin no умолчанию, а также возможные оежимы для каждого типа связи
Идентифицирующая связь | Неидентифицирующая связь (Nulls Allowed) | Неидентифицирующая связь (No Nulls) | Категориальная связь | |
Child Delete Возможные режимы | RESTRICT, CASCADE, NONE | RESTRICT, CASCADE, NONE, SET NULL, SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, |
NONE | ||||
Child Delete Режимы по умолчанию | NONE | NONE | NONE | NONE |
Child Insert Возможные режимы | RESTRICT, CASCADE, | RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, |
NONE | NONE | |||
Child Insert Режимы по умолчанию | RESTRICT | SET NULL | RESTRICT | RESTRICT |
Child Update Возможные режимы | RESTRICT, CASCADE, NONE | RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, NONE |
Child Update Режимы по умолчанию | RESTRICT | SET NULL | RESTRICT | RESTRICT |
Parent Delete Возможные режимы | RESTRICT, CASCADE, NONE | RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, |
NONE | ||||
Parent Delete Режимы по умолчанию | RESTRICT | SET NULL | RESTRICT | CASCADE |
Parent Insert Возможные режимы | RESTRICT, CASCADE, NONE | RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, NONE |
Parent Insert Режимы по умолчанию | NONE | NONE | NONE | NONE |
Parent Update Возможные режимы | RESTRICT, CASCADE, NONE | RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT | RESTRICT, CASCADE, NONE, SET DEFAULT | RESTRICT, CASCADE, NONE |
Parent Update Режимы по умолчанию | RESTRICT | SET NULL | RESTRICT | CASCADE |
Связь многие-ко-многим возможна только на уровне логической модели данных. На рис. 2.31 вверху показан пример связи многие-ко-многим. Врач может принимать много пациентов, пациент может лечиться у нескольких врачей. Такая связь обозначается сплошной линией с двумя точками на концах.
Рис. 2.31. Связь многие-ко-многим
Для внесения связи следует установить курсор на кнопке
в палитре инструментов, щелкнуть сначала по одной, а затем по другой сущности.Связь многие-ко-многим должна именоваться двумя фразами - в обе стороны (в примере "принимает/лечится"). Это облегчает чтение диаграммы. Связь на рис. 2.31 следует читать Вран <принимает> Пациент"а, Пациент <лечится> у Врач"а.
При переходе к физическому уровню ERwin автоматически преобразует связь многие-ко-многим, добавляя новую таблицу и устанавливая две новые связи один-ко-многим от старых к новой таблице (рис. 2.32, сверху). При 'этом имя новой таблице присваивается автоматически как “Имя1 Имя2".
Рис. 2.32. Иллюстрация автоматического разрешения связи многие-ко-многим на уровне физической модели
Автоматического решения проблемы связи многие-ко-многим не всегда оказывается достаточно. В примере таблица Doctor_Patient имеет смысл визита к врачу, поэтому ее следует переименовать согласно бизнес-логике в Visit. Один и тот же пациент может много раз посещать врача, поэтому для того, чтобы идентифицировать визит, необходимо в состав первичного ключа таблицы Visit добавить дополнительную колонку, например дату-время посещения (VisitDatetime, рис. 2.33).
Рис. 2.33. Дополнение модели при разрешении связи многие-ко-многим на уровне физической модели
Следует заметить, что после внесения дополнительной колонки на физическом уровне на логическом уровне представление модели не изменится, диаграмма будет выглядеть так, как на рис. 2.31.
2.2.4. Типы сущностей и иерархия наследования
Как было указано выше, связи определяют, является ли сущность независимой или зависимой. Различают несколько типов зависимых сущностей.
Характеристическая - зависимая дочерняя сущность, которая связана только с одной родительской и по смыслу хранит информацию о характеристиках родительской сущности.
Рис. 2.34. Пример характеристической сущности "Хобби "
Ассоциативная - сущность, связанная с несколькими родительскими сущностями. Такая сущность содержит информацию о связях сущностей. Примером ассоциативной сущности является Visit на рис. 2.33.