Глава 8 Связи: Возможности Повышенного Уровня Сложности
Содержание главы
В предыдущих главах рассматривался наиболее часто встречающийся тип связей -
идентифицирующие связи - и было показано, как ER
win производит миграцию ключей через
эти связи.
В этой главе Вы узнаете, как:
·
Создавать и
использовать неидентифицирующие, рекурсивные связи и связи
подтипов.
·
Производить
автоматическую миграцию ключевых атрибутов из одной сущности в
другую.
·
Предотвращать
появление одинаковых имен атрибутов.
·
Задавать режимы
наследования атрибутов.
·
Задавать порядок
обработки нулевых значений в дочерней сущности связи.
·
Исключать связи
'многие-ко-многим'.
Управление внешними ключами
При создании диаграммы, хотя Вам, может быть, и хочется добавить ключевые
атрибуты в сущность, когда Вы ее создаете, ER
win может сделать большую часть этой
работы за Вас, если Вы ему позволите. Когда Вы создаете связь между двумя
сущностями, ERwin автоматически производит миграцию ключевых атрибутов родительской
сущности в дочернюю сущность, где они становятся внешними ключами. Поскольку
ERwin
поддерживает автоматическую миграцию ключей, мы рекомендуем Вам добавлять
первичные ключи в независимую сущность сразу же, как только она создана, но не
беспокойтесь о ключах для дочерних сущностей. После того, как Вы создадите связь
и ERwin
произведет автоматическую миграцию внешних ключей, вернитесь и добавьте
собственные ключи в дочерние сущности диаграммы.
Чтобы облегчить проектирование базы данных, ER
win позволяет задать режим Unique Key,
который можно использовать для того, чтобы предупредить Вас о создании атрибута,
который может автоматически мигрировать через связь, или запретить Вам создание
таких атрибутов. Кроме того, если Вы удаляете связь, ERwin автоматически удаляет
соответствующие внешние ключи из дочерних сущностей. См. Гл.11,
Документирование правил, разд. 'Обеспечение уникальности имен сущностей и
атрибутов'.
Как создать внешние ключи
1. Нарисуйте связь между двумя сущностями или между сущностью и ею же самой
(рекурсивная связь). Внешний ключ автоматически мигрирует. Вам не нужно ничего
делать!
Чтобы видеть автоматическую миграцию внешних ключей,
нужно установить режим
просмотра диаграммы AttributeDisplay. У Вас должны быть уже созданы атрибуты
первичногоключа в родительской сущности.
Как посмотреть атрибуты внешнего ключа
1. Щелкните правой кнопкой мыши по соединительной линии связи - Вы войдете в
меню Relationship.
2. Дайте команду 'Relationship' для входа в редактор
Relationship.
Задание режимов наследования атрибутов
Когда ER
win производит миграцию атрибута первичного ключа, то по умолчанию внешний
ключ, который появляется в дочерней сущности, наследует имя, но не наследует
определение атрибута первичного ключа. Если Вы хотите, чтобы определение
атрибута первичного ключа тоже мигрировало в дочернюю сущность, Вам нужно
изменить режимы наследования - Attribute Inheritance Option - которые
ERwin
устанавливает по умолчанию. Для того, чтобы изменить режим наследования по
отношению к мигрирующим ключам, дайте команду 'Attribute Inheritance...' в меню
Option. Вы войдете в окно-диалог Attribute Inheritance Option.
В этом диалоге можно установить три режима. По умолчанию установлен режим 'No
Inheritance', а Вы можете изменить его на 'Full Inheritance' или 'Restricted
Inheritance', нажимая соответствующую кнопку, а затем - 'ОК' для сохранения
нового режима.
Как задать режим наследования атрибута
1. Дайте команду 'Attribute Inheritance...' из меню Option.
2. Нажмите на одну из кнопок в окне 'Inheritance of Primary Key Definitions'
для того, чтобы задать нужный Вам режим наследования атрибута:
'Full Inheritance' - определения атрибутов первичного ключа мигрируют во
внешний ключ для всех новых и уже созданных связей текущей диаграммы.
'Restricted Inheritance' - определения атрибутов первичного ключа мигрируют
во внешний ключ для всех новых cвязей, но это не распространяется на уже
созданные связи текущей диаграммы.
'No Inheritance' - миграция определений атрибутов запрещается для всех связей
текущей диаграммы. Это тот режим, который установлен по умолчанию.
3. Нажмите 'ОК', чтобы сохранить Ваши установки и вернуться в окно
диаграммы.
Задание неидентифицирующих связей
Идентифицирующей связью
называется связь, которая добавляет признаки
идентичности в дочернюю сущность путем миграции ключей родительской сущности в
область ключевых атрибутов дочерней и таким образом делая дочернюю сущность
зависимой от родительской в смысле своей идентичности. Например, когда
атрибут movie-numbERмигрирует из сущности MOVIE в MOVIE-COPY на диаграмме
MOVIES.ER1, токаждый экземпляр MOVIE-COPY зависит и от movie-numbER, и от
movie-copy-numbER, которые уникальным образом его определяют (ни один из этих двух
атрибутов не может сам по себе уникальным образом определить конкретную копию
фильма).
Можно задать также и такую связь, которая не ставит дочернюю сущность в
зависимость от родительской. Этот тип связи называется неидентифицирующей
связью. В ER
win такая связь обозначается пунктирной линией с жирной точкой на конце,
соответствующем дочерней связи. При неидентифицирующей связи атрибуты первичного
ключа родиетльской сущности мигрируют в область данных (неключевая область) ,
которяа расположена под чертой в дочерней сущности. Если атрибуты, которые
мигрировали в неключевую область дочерней сущности, не нужны в этой сущности, то
связь называется необязательной неидентифицирующей связью, что
подразумевает, что мигрировавшие атрибуты не нужны дочерней сущности для ее
идентификации и что она может существовать и без этих атрибутов. В
ERwin
необязательная неидентифицирующая связь обозначается пунктирной линией с жирной
точкой на одном конце (дочернем) и ромбиком на другом (родительском).
На рисунке ниже показано, как изображаются в ER
win идентифицирующие,
неидентифицирующие и необязательные неидентифицирующие связи, и обобщаются
различия между этими связями.
Если связь уже создана на диаграмме, то Вы можете изменить ее тип в редакторе
Relationship.
Как изменить тип связи
1. Выберите ту связь, которую Вы хотите изменить. Установите курсор на линию
связи и щелкните правой кнопкой мыши для входа в pop-up меню Editor.
2. Дайте команду 'Relationship' в меню Editor для входа в редактор
Relationship.
3. Нажмите нужную кнопку в окне Relationship Type (Identifying -
идентифицирующая, Non-Identifying - неидентифицирующая).
4. Нажмите 'ОК' для того, чтобы зафиксировать изменения. ER
win изменяет линию связи на
диаграмме в соответствии с новым типом.
Рекурсивной связи в
ERwin автоматически присваивается типNon-Identifiyng. Изменить его
нельзя.
Разрешить или не разрешить нулевые значения?
Когда Вы рисуете неидентифицирующую связь, Вам нужно решить, могут ли
атрибуты внешнего ключа, наследуемые от родителя, принимать значение NULL или
нет. По умолчанию для неидентифицирующей связи задается режим 'Nulls Allowed',
что означает, что дочерняя сущность может существовать без родительской, и связь
называется необязательной. 'No Nulls' означает, что существование дочерней
сущности зависит от родительской, и связь называется обязательной. В
случае необязательной связи (Nulls Allowed) на родительском конце
неидентифицирующей связи ER
win ставит знак - ромбик.
Одно из основных различий между идентифицирующей и неидентифицирующей связью
- в том, что только те внешние ключи, которые мигрируют через неидентифицирующую
связь, могут принимать значения NULL.