определение атрибутов сущностей;
приведение модели к требуемому уровню нормальной формы;
переход к физическому описанию модели: назначение соответст-
вий имя сущности – имя таблицы, атрибут сущности – атрибут таблицы;
задание триггеров, процедур и ограничений;
генерация базы данных.
Erwin создает визуальное представление (модель данных) для решае-
мой задачи. Это представление может использоваться для детального анали-
за, уточнения и распространения документации, необходимой в цикле разра-
ботки. Однако ERwin далеко не только инструмент для рисования. ERwin ав-
томатически создает базу данных (таблицы, индексы, хранимые процедуры,
триггеры для обеспечения ссылочной целостности и другие объекты, необ-
ходимые для управления данными).
Создание сущности
Для внесения сущности в модель необходимо щелкнуть по кнопке сущности на панели инструментов (Erwin Toolbox)
, затем – по тому месту на диаграмме, где необходимо расположить новую сущность. Щелкнув пра-
вой кнопкой мыши по сущности и выбрав из всплывающего меню пункт
Entity Editor, можно вызвать диалог Entity Editor, в котором определяются имя, описание и комментарии сущности.
Каждая сущность должна быть полностью определена с помощью тек-
стового описания в закладке Definition. Эти определения полезны как на ло-
гическом уровне, поскольку позволяют понять, что это за объект, так и на физическом уровне, поскольку их можно экспортировать как часть схемы и использовать в реальной БД (CREATE COMMENT on entity_name). Закладки
Note, Note2, Note3, UDP (User Defined Properties – Свойства, определенные пользователем) служат для внесения дополнительных комментариев и опре-
делений к сущности.
В закладке Icon каждой сущности можно поставить в соответствие изо-
бражение, которое будет отображаться в режиме просмотра модели на уров-
46
не иконок и изображение, которое будет отображаться на всех других уров-
нях. Закладка UDP диалога Entity Editor служит для определения свойств, оп-
ределяемых пользователем (User – Defined Properties). При нажатии на кноп-
ку
этой закладки вызывается диалог User – Defined Property Editor (также вызывается из меню Edit/UDPs). В нем необходимо указать вид объекта, для которого заводится UDP (диаграмма в целом, сущность, атрибут и т.д.) и тип данных. Для внесения нового свойства следует щелкнуть в таблице по кноп-
ке
и внести имя, тип данных, значение по умолчанию и определение.
Создание атрибутов. Для описания атрибутов следует, щелкнув пра-
вой кнопкой по сущности, выбрать в появившемся меню пункт Attribute
Editor. Появится диалог Attribute Editor. Если щелкнуть по кнопке New, то в появившемся диалоге New Attribute можно указать имя атрибута, имя соот-
ветствующей ему в физической модели колонки и домен. Домен атрибута будет использоваться при определении типа колонки на уровне физической модели. Для атрибутов первичного ключа в закладке General диалога
Attribute Editor необходимо сделать пометку в окне выбора Primary Key.
Закладки Definition, Note и UDP несут те же функции, что и при опре-
делении сущности, но на уровне атрибутов.
Для большей наглядности диаграммы каждый атрибут можно связать с иконкой. Это можно сделать при помощи списка выбора Icon в закладке
General. Очень важно дать атрибуту правильное имя. Атрибуты должны име-
новаться в единственном числе и иметь четкое смысловое значение.
Согласно синтаксису IDEF1X, имя атрибута должно быть уникальным в рамках модели (а не только в рамках сущности!). По умолчанию при по-
пытке внесения уже существующего имени атрибута ERwin переименовыва-
ет его. Например, если атрибут Комментарий уже существует в модели, дру-
гой атрибут (в другой сущности) будет назван Комментарий/2, затем Ком-
ментарий/3 и т.д.
При переносе атрибутов внутри и между сущностями можно восполь-
зоваться техникой drag&drop, выбрав кнопку
в палитре инструментов.
47
Создание связи Для создания новой связи следует выбрать идентифи-
цирующую или неидентифицирующую связь в палитре инструментов (ERwin Toolbox), щелкнуть сначала по родительской, а затем по дочерней сущности.
В палитре инструментов кнопка
соответствует идентифицирующей связи,
кнопка
связи многие-ко-многим и кнопка
соответствует неидентифи-
цирующей связи. Для редактирования свойств связи следует щелкнуть пра-
вой кнопкой мыши по связи и выбрать на контекстном меню пункт
Relationship Editor. В закладке General появившегося диалога можно задать мощность, имя и тип связи. Мощность связи (Cardinality) – служит для обо-
значения отношения числа экземпляров родительской сущности к числу эк-
земпляров дочерней. Различают четыре типа мощности: общий случай, когда одному экземпляру родительской сущности соответствуют 0, 1 или много эк-
земпляров дочерней сущности, не помечается каким-либо символом; симво-
лом P помечается случай, когда одному экземпляру родительской сущности соответствуют 1 или много экземпляров дочерней сущности (исключено ну-
левое значение); символом Z помечается случай, когда одному экземпляру родительской сущности соответствуют 0 или 1 экземпляр дочерней сущности
(исключены множественные значения); цифрой помечается случай, когда од-
ному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности. По умолчанию символ, обозначаю-
щий мощность связи, не показывается на диаграмме. Для отображения имени следует в контекстном меню, которое появляется, если щелкнуть правой кнопкой мыши по любому месту диаграммы, не занятому объектами модели,
выбрать пункт Display Options/Relationship и затем включить опцию
Cardinality.
Тип связи (идентифицирующая/неидентифицирующая).
В IDEF1X различают зависимые и независимые сущности. Тип сущно-
сти определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и за-
висимой (дочерний конец связи) сущностями. Когда рисуется идентифици-
48
рующая связь, ERwin автоматически преобразует дочернюю связь в зависи-
мую. Зависимая сущность изображается прямоугольником со скругленными углами.
Экземпляр зависимой сущности определяется только через отношение к родительской сущности. При установлении идентифицирующей связи ат-
рибуты первичного ключа родительской сущности автоматически переносят-
ся в состав первичного ключа дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией ат-
рибутов. В дочерней сущности новые атрибуты помечаются как внешние ключи – (FK).
При установлении неидентифицирующей связи дочерняя сущность ос-
тается независимой, а атрибуты первичного ключа родительской сущности мигрируют в состав неключевых компонентов дочерней. Неидентифици-
рующая связь служит для связи независимых сущностей.
Идентифицирующая связь показывается на диаграмме сплошной лини-
ей с жирной точкой на дочернем конце связи, неидентифицирующая – пунк-
тирной. Для неидентифицирующей связи можно указать обязательность
(Nulls в закладке General диалога Relationship Editor). В случае обязательной связи (No Nulls) при генерации схемы БД атрибут внешнего ключа получит признак NOT NULL, несмотря на то, что внешний ключ не войдет в состав первичного ключа дочерней сущности. В случае необязательной связи (Nulls
Allowed) внешний ключ может принимать значение NULL. Необязательная неидентифицирующая связь помечается прозрачным ромбом со стороны ро-
дительской сущности
Имя связи (Verb Phrase) – фраза, характеризующая отношение между родительской и дочерней сущностями. Для связи один-ко-многим идентифи-
цирующей или неидентифицирующей достаточно указать имя, характери-
зующей отношение от родительской к дочерней сущности (Parent-to-Child).
Для связи многие-ко-многим следует указывать имена как Parent-to-Child, так и Child-to-Parent. Для отображения имени следует в контекстном меню, кото-
49
рое появляется, если щелкнуть правой кнопкой мыши по любому месту диа-
граммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Verb Phrase.
Имя роли или функциональное имя (Rolename) – это синоним атри-
бута внешнего ключа, который показывает, какую роль играет атрибут в до-
черней сущности. Задать имя роли можно в закладке Rolename/RI Actions
диалога Relationship Editor.
Рисунок 20 - Имена ролей внешних ключей В примере, приведенном на рис.20, в сущности Сотрудник внешний
ключ Номер отдела имеет имя роли «Где работает», которое показывает, ка-
кую роль играет этот атрибут в сущности. По умолчанию в списке атрибутов показывается только имя роли. Для отображения полного имени атрибута
(как функционального имени, так и имени роли) следует в контекстном ме-
ню, которое появляется, если щелкнуть правой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display
Options/Entities и затем включить опцию Rolename/Attribute. Полное имя по-
казывается как функциональное имя и базовое имя, разделенные точкой
(рис.21).
Рисунок 21 - Случай обязательности имен ролей
50