Тип связи (идентифицирующая/неидентифицирующая)
В IDEF1X различают зависимые и независимые сущности, причем тип сущности определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Когда рисуется идентифицирующая связь, ERwin автоматически преобразует дочернюю сущность в зависимую (изображается прямоугольником со скругленными углами – рис. П.6).
Рис. П.6. Изображение сущностей и связи при построении логической модели
Экземпляр зависимой сущности определяется только через отношение к родительской сущности. При установлении идентифицирующей связи атрибуты первичного ключа родительской сущности автоматически переносятся в состав первичного ключа дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией атрибутов. В дочерней сущности новые атрибуты помечаются как внешние ключи – (FK).
При установлении неидентифицирующей связи дочерняя сущность остается независимой, а атрибуты первичного ключа родительской сущности мигрируют в состав неключевых компонентов дочерней. Неидентифицирующая связь служит для связи независимых сущностей.
Идентифицирующая связь показывается на диаграмме сплошной линией с жирной точкой на дочернем конце связи, неидентифицирующая – пунктирной линией.
Для неидентифицирующей связи можно указать обязательность (опция Nulls на закладке General в диалоговом окне Relationship Editor). В случае обязательной связи (No Nulls) при генерации схемы БД атрибут внешнего ключа получит признак NOT NULL, несмотря на то, что внешний ключ не войдет в состав первичного ключа дочерней сущности. В случае необязательной связи (Nulls Allowed) внешний ключ может принимать значение NULL. Необязательная неидентифицирующая связь помечается прозрачным ромбом со стороны родительской сущности.
Создание связи
В палитре инструментов (ERwin Toolbox) предусмотрены следующие кнопки, которые позволяют создавать новые связи: – для идентифицирующей связи; – для неидентифицирующей связи; – для связи «многие-ко-многим». После выбора соответствующей кнопки следует щелкнуть сначала по родительской сущности, а затем – по дочерней.
Чтобы произвести редактирование свойств связи, необходимо щелкнуть правой кнопкой мыши по линии связи и в контекстном меню выбрать пункт Relationship Editor. При этом открывается диалоговое окно, в котором закладка General позволяет задать мощность, имя и тип связи.
Мощность связи (Cardinality) обозначает отношение числа экземпляров родительской сущности к числу экземпляров дочерней.
Различают четыре типа мощности:
1) общий случай, когда одному экземпляру родительской сущности может соответствовать любое положительное число экземпляров дочерней сущности (не помечается никаким символом);
2) символом P помечается случай, когда одному экземпляру родительской сущности соответствует не менее одного экземпляра дочерней сущности (нулевое значение исключено);
3) символом Z помечается случай, когда одному экземпляру родительской сущности соответствует не более одного экземпляра дочерней сущности (множественные значения исключены);
4) цифрой помечается случай, когда одному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности.
По умолчанию символ, обозначающий мощность связи, на диаграмме не показывается. Для отображения этого символа следует вызвать контекстное меню щелчком правой кнопки мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Cardinality.
Имя связи (Verb Phrase) – это фраза, которая характеризует отношение между родительской и дочерней сущностями. Для идентифицирующей или неидентифицирующей связи «один-ко-многим» достаточно указать имя, характеризующее отношение родительской сущности к дочерней (Parent-to-Child). Для связи «многие-ко-многим» следует указывать имена как Parent-to-Child, так и Child-to-Parent. Чтобы на диаграмме все связи отображались вместе со своими именами (рис. П.6), следует в контекстном меню, которое появляется при щелчке правой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Verb Phrase.