Пример создания логической ER-модели

В качестве предметной области выбрано полиграфическое производство.

1. Для начала проектирования необходимо создать новую модель. Для этого можно воспользоваться пунктом основного меню File/New (рисунок 21) или кнопкой на панели ErwinToolbar.

Рисунок 21 - Пункт меню для создания новой модели

2. В появившемся диалоговом окне (рисунок 22) следует указать тип создаваемой модели.

Существует возможность разрабатывать только логическую модель данных, только физическую или же производить комплексное моделирование обеих моделей.

Примечание: В случае разработки физической модели данных требуется указать использующуюся базу данных.

Рисунок 22 - Окно создания новой модели

3. Далее следует указать базовые параметры вновь созданной модели в пункте основного меню Model/Model Properties (рисунок 23).

Рисунок 23 - Пункт основного меню "Model Properties"

В качестве основных параметров необходимо указать название модели, её автора, базовые механизмы преобразования элементов логической модели в физические, а также, при необходимости, активировать дополнительные возможности моделирования (рисунок 24).

Рисунок 24 - Базовые параметры модели

Примечание: в качестве автоматически преобразуемых элементов логической модели могут выступать связи «многие ко многим» и категориальные связи.

Далее во вкладке Definition следует описать назначение разрабатываемой модели, а на вкладке Notation выбрать нотации моделирования (рисунок 25).

Рисунок 25 - Выбор нотации моделирования

Вкладка Defaults позволяет указать базовые значения для типов атрибутов сущностей, неключевых атрибутов и неидентифицированных отношений (рисунок).

Рисунок 26 - Базовые значения

Базовые правила ссылочной целостности указываются во вкладке RIDefaults (рисунок 27) и представляют собой логические конструкции, которые выражают бизнес-правила использования данных и представляют собой правила вставки, замены и удаления.

Рисунок 27 - Правила ссылочной целостности

4. Следующим шагом следует указать параметры привязки объектов к сетке рабочей области, а также убедиться в возможности перемещать и масштабировать элементы модели (рисунок 29). Данные параметры находятся в пункте основного меню Format/Preferences (рисунок 28).

Рисунок 28 - Пункт основного меню Preferences

Рисунок29 – Параметры рабочего слоя

Вкладка Display позволяет указать отображение некоторых элементов модели (рисунок 30).

Рисунок 30 - Параметры отображения

Для настройки отображения свойств связей используется пункт основного меню Format/Relationship Display.

5. Предпоследним подготовительным шагом является настройка отображения шрифтов модели. Пункт основного меню Format/Default Fonts&Colors позволяет настроить отображения всех шрифтов используемых в различных местах модели, а также задавать им цвета и начертания (рисунок 31).

Рисунок 31 - Настройка шрифтов

6. Завершающим этапом подготовки к процессу проектирования модели данных является настройка параметров именования элементов этой модели. Используя вкладки диалогового окна пункта основного меню Tools/Names/Model Naming Options (рисунок 32) можно указать специальный файл с правилами именования объектов модели (рисунок 33), регистр и максимальную длину имени объектов (рисунок 34), а также реакцию программы на одинаковые имена (рисунок 35).

Рисунок 32 - Настройка именования объектов

Рисунок 33 - Указание файла параметров именования

Рисунок 34 - Настройка регистра и максимальной длины

Рисунок 35 - Отклик программы на совпадающие имена

7. После завершения предварительных настроек можно начинать создание модели данных. Все элементы модели можно создать с помощью панели Erwin Toolbox:

· сущности создаются при помощи кнопки Entity ( );

· идентифицирующая связь между сущностями создаётся при помощи кнопки IdentifyingRelationship ( );

· неидентифицирующая связь между сущностями создаётся при помощи кнопки Non- identifyingRelationship ( );

· связь «многие ко многим» создаётся при помощи кнопки Many-to-manyrelationship ( ).

Примечание 1: Процесс создания сущности заключается в активации одноимённого инструмента из панели и указания места в рабочей области, в котором эта сущность должна располагаться. В дальнейшем процессе проектирования созданные сущности можно перемещать при помощи инструмента Select ( ).

Примечание 2: Процесс создания связи заключается в выборе соответствующего инструмента и последовательного указания родительской и дочерней сущности.

8. После создания сущности необходимо указать её основные параметры, набор атрибутов и их принадлежность к ключевым группам. Доступ к соответствующим диалоговым окнам осуществляется через пункт основного меня Model (рисунок 36).

Рисунок 36 - Доступ к параметрам сущностей

Альтернативным образом можно получить доступ к требуемым параметрам при помощи контекстного меню (рисунок 37).

Рисунок 37 - Контекстное меню сущности

Примечание: Доступ к параметрам осуществляется по двойному нажатию левой клавиши мыши, а тип параметров, к которым произойдёт доступ, определяется указателем рядом с названием соответствующего типа.

Диалоговое окно параметров сущности представлено на рисунке 38.

Рисунок 38 - Параметры сущности

Вкладка Definition содержит определение сущности. Эти определения полезны как на логическом уровне, поскольку позволяют понять, что это за объект, так и на физическом, поскольку их можно экспортировать как часть схемы и использовать в реальной базе данных.

Вкладка Volumetrics позволяет уже на этапе создания предусмотреть ограничения для физической проекции данной сущности (рисунок 39).

Вкладка Note позволяет добавлять дополнительные замечания о сущности, которые не были отражены в определении, введенном во вкладке Definition. Здесь можно ввести полезное замечание, описывающее какое-либо бизнес-правило или соглашение по организации диаграммы.

Во вкладке Note 2 можно задокументировать некоторые возможные запросы, которые, как ожидается, будут использоваться по отношению к сущности в базе данных. При переходе к физическому проектированию записанные запросы помогут принимать такие решения в отношении проектирования, которые сделают базу данных более эффективной.

Вкладка Note 3 позволяет вводить примеры данных для сущности (в произвольной форме).

Во вкладке Icon каждой сущности можно поставить в соответствие изображение, которое будет отображаться в режиме просмотра модели на уровне иконок.

Рисунок 39 - Ограничения для физической проекции сущности

Применение свойств, определяемых пользователем (UDP), аналогично их использованию в BPwin. Для определения UDP служит диалог User-DefinedProperties пункта основного меню Model/UDPDictionary (рисунок 40).

Рисунок 40 - Пункт меню UDPDictionary

B нем необходимо указать вид объекта, для которого заводится UDP (диаграмма в целом, сущность, атрибут и т. д.), и тип данных. Для внесения нового свойства следует внести имя, тип данных, значение по умолчанию и определение. Далее строка таблицы появляется автоматически (рисунок 41).

ERwin поддерживает для UDP 6 типов данных:

Date. Дата. Используется формат MM/DD/YY. Для выбора значения даты можно использовать контекстный календарь.

Int. Целое число.

Real. Действительное число.

Text. Строка (ASCII).

List. Список.

Примечание 2: При задании списка в диалоге User-DefinedPropertyEditor значения следует разделять запятой, значение по умолчанию выделяется символом «~».

Command. Команда - выполняемая строка.

Erwin автоматически сохраняет историю всех изменений, связанных с объектами. Во вкладке History диалога Entities отображается список всех изменений, каждому из которых можно дать комментарий в окне Comment.

 

Рисунок 41 - Создание UDP

9. Чтобы заполнить сущность атрибутами необходимо воспользоваться диалоговым окном Attributes (рисунок 42).

Рисунок 42 - Диалоговое окно Attributes

В левой части окна располагается список атрибутов и элементы управления процедурами их создания, переименования и удаления.

Правая часть окна содержит вкладки параметров создаваемого атрибута.

Вкладка General предоставляет возможность указания домена для создаваемого атрибута, его изображение в виде иконки, а также принадлежность к первичному ключу.

Домен можно определить как абстрактный атрибут, на основе которого можно создавать обычные атрибуты, при этом создаваемые атрибуты будут иметь все свойства домена-прародителя. Каждый атрибут может быть определён только на одном домене, но на одном домене может быть определено множество атрибутов. По умолчанию ERwin имеет 4 домена:

· string;

· number;

· blob;

· datetime.

На логическом уровне домены можно описать без конкретных физических свойств, но на физическом уровне они автоматически получат специфические свойства, которые можно изменить вручную.

Примечание: данные специфические свойства зависят от физической реализации базы данных и её ограничений. Например, число транспортных средств предприятия имеет тип Number в логической модели, а в физической, из-за ограничения типизации, имеет тип Integer.

Для создания собственных доменов следует использовать пункт основного меню Model/DomainDictionary (рисунок 43), или кнопку справа от параметров сортировки существующих доменов.

Рисунок 43 - Создание нового домена

Вкладка Datatype диалогового окна Attributes (рисунок 44), также как и диалогового окна DomainDictionary отвечает за указания типа данных в физическом представлении сущности. Разница заключается только в принципе использования: каждый раз, создавай атрибуты одного типа, требуется вручную задавать их физические типы данных, что неудобно, следовательно, логично создать требуемый домен с указанным физическим типом и указывать его как прародителя для создаваемых атрибутов.

Рисунок 44 – Вкладка Data type

В обоих диалоговых окнах вкладка Constraint (рисунок 45) отвечает за установление правил валидации вносимых значений, а также базовый значений по умолчанию либо для атрибута, либо для домена.

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

Вкладка Note позволяет добавлять замечания об одном или нескольких атрибутах сущности, её доменах, которые не вошли в определения.

Вкладка UDP служит для задания значений свойств, определяемых пользователем. Примечание 2: Предварительно эти свойства должны быть внесены в диалог User-DefinedPropertyEditor как свойства атрибутов.

Рисунок 45 - Вкладка Constraint

Вкладка KeyGroup (рисунок 46) доступна только для атрибутов и позволяет включать их в ключевые группы.

Рисунок 46 - Вкладка KeyGroup

Ключи можно условно разделить на следующие группы:

· Первичный ключ (primary кеу) - это атрибут или группа атрибутов, однозначно идентифицирующая экземпляр сущности. Атрибуты первичного ключа на диаграмме не требуют специального обозначения - это те атрибуты, которые находятся в списке атрибутов выше горизонтальной линии. При внесении нового атрибута в диалоге Attributes для того, чтобы сделать его атрибутом первичного ключа, нужно включить флажок Primary Key в нижней части вкладки General;

· Некоторые сущности могут иметь более одного возможного ключа. Тогда один из них становится первичным, а остальные – альтернативными ключами. Альтернативный ключ (Alternate Кеу) - это потенциальный ключ, не ставший первичным. ERwin позволяет выделить атрибуты альтернативных ключей, и по умолчанию в дальнейшем при генерации схемы базы данных по этим атрибутам будет генерироваться уникальный индекс;

· При работе ИС часто бывает необходимо обеспечить доступ к нескольким экземплярам сущности, объединенным каким-либо одним признаком. Для повышения производительности в этом случае используются неуникальные индексы. ERwin позволяет на уровне логической модели назначить атрибуты, которые будут участвовать в неуникальных индексах. Атрибуты, участвующие в неуникальных индексах, называются инверсионными входами (InversionEntries). Инверсионный вход (InversionEntry) - это атрибут или группа атрибутов, которые не определяют экземпляр сущности уникальным образом, но часто используются для обращения к экземплярам сущности. ERwin генерирует неуникальный индекс для каждого Inversion Entry.

Для создания новой ключевой группы следует использовать диалоговое окно пункта основного меню Model/KeyGroups (рисунок 47) или перейти него нажатием кнопки вкладки KeyGroup.

Рисунок 47 - Диалоговое окно KeyGroups

При создании новой ключевой группы необходимо указать её название и индекс, который будет отображаться во вкладке KeyGroup каждой сущности, а также тип самой ключевой группы (рисунок 48).

Рисунок 48 - Создание новой ключевой группы

Далее в списке созданных групп необходимо выбрать вновь созданную и на вкладке Members перенести в неё необходимые сущности.

Процесс создания нового атрибута сущности или домена идентичен. Соответствующие диалоговые окна представлены на рисунках 49 и 50.


Рисунок 49 – Создание атрибута

Рисунок 50 - Создание домена


10. После создания набора сущностей и заполнения их атрибутами необходимо, в соответствии с методологией ER-модели, установить определённые правила их взаимоотношения. Для этого требуется создать связи (Relationships).

Связь является логическим соотношением между сущностями. Каждая связь должна наименоваться глаголом или глагольной фразой (Relationship VerbPhrase). Имя связи (Verb Phrase) – фраза, характеризующая отношение между родительской и дочерней сущностями, которая выражает некоторое ограничение или бизнес-правило и облегчает чтение диаграммы.

Существуют различные типы связей:

· идентифицирующая связь (identifying relationship) «один ко многим»;

· связь «многие ко многим»;

· неидентифицирующая связь (non-identifying relationship) «один ко многим».

В зависимости от используемой связи сущности разделяются на зависимые (Depend entity) и независимые (Independent entity). Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. В нотации IDEF1X зависимая сущность изображается прямоугольником со скруглёнными углами. Экземпляр зависимой сущности определяется только через отношение к родительской сущности, то есть информация в дочерней сущности не может быть сохранена и не имеет смысла без информации в родительской.

При установлении идентифицирующей связи атрибуты первичного ключа родительской сущности автоматически переносятся в состав первичного ключа дочерней. Данная операция называется миграцией атрибутов. Новые атрибуты дочерней сущности помечаются FK.

При установлении неидентифицирующей связи дочерняя сущность остаётся независимой, а атрибуты первичного ключа родительской сущности мигрируют в состав неключевых атрибутов дочерней сущности. Данный тип связи служит для связывания независимых сущностей.

Идентифицирующая связь показывается на диаграмме сплошной линией с жирной точкой на дочернем конце связи, неидентифицирующая – пунктирной.

Каждая связь имеет параметр мощности. Мощность связи (Cardinality)служит для обозначения отношения числа экземпляров родительской сущности к числу экземпляров дочерней.

Различают 4 типа мощности:

· общий случай, когда одному экземпляру родительской сущности соответствуют 0, 1 или много экземпляров дочерней сущности не помечается каким-либо символом;

· символом P помечается случай, когда одному экземпляру родительской сущности соответствуют 1 или много экземпляров дочерней сущности (исключено нулевое значение);

· символом Z помечается случай, когда одному экземпляру родительской сущности соответствуют 0 или 1 экземпляр дочерней сущности (исключены множественные значения);

· цифрой помечается случай точного соответствия, когда одному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности.

Ещё одним параметром связи можно считать имя её роли (Rolename) – синоним атрибута внешнего ключа, который показывает, какую роль играет атрибут в дочерней сущности. Полное имя атрибута, задействованного в связи, будет состоять из функционального имени и базового имени, разделённых точкой.

Обязательным является применение имен ролей в случае, если два или более атрибута одной сущности определены по одной и той же области, то есть имеют одинаковую область значений, но разный смысл.

Также обязательно присваивать имена ролей рекурсивным связям («рыболовным крючкам» – fishhook), когда одна и та же сущность является и родительской и дочерней одновременно. При задании рекурсивной связи атрибут должен мигрировать в качестве внешнего ключа в состав неключевых атрибутов той же сущности. Атрибут не может появиться дважды в одной сущности под одним именем, поэтому обязательно должен получить имя роли.

Примечание: если атрибут мигрирует в качестве внешнего ключа более чем на один уровень, то на первом уровне отображается полное имя (роль + базовое), на втором и более – только имя роли.

Для указания параметров связи следует использовать пункт основного меню Model/Relationships или пункт Relationship Properties контекстного меню связи (рисунок 51).

Рисунок 51 - Диалоговое окно параметров связи

Вкладка General позволяет указать мощность связи (Cardinality), тип связи (RelationshipType), разрешить отсутствующие значения (Nulls) и указать глагольные связи (VerbPhrase).

Вкладка Definition позволяет указать описание связи.

Вкладка Role name (рисунок 52) позволяет указать имя роли атрибута и проследить миграцию.

Рисунок 52 - Вкладка Rolename

Вкладка RIActions позволяет указать правила ссылочной целостности, а вкладка UDP – указывать пользовательские свойства.

Пример использование указанных требований показан на рисунке 53.

Рисунок 53 - Связи между сущностями

В данном примере сущность «Телефон» является зависимой, поскольку не имеет смысла в хранении без привязки к конкретному сотруднику, а сущность «Сотрудник» – независима, поскольку на предприятии может числиться сотрудник без указания должности. Наличие рекурсивной связи демонстрирует необходимость использования ролей атрибутов.

Примечание 2: белый ромб на конце связи указывает на возможность отсутствия значения в сущности (в данном случае сотрудник может не иметь руководителя, то есть быть вершиной иерархии).

Зависимые сущности бывают нескольких типов:

· характеристическая – зависимая дочерняя сущность, которая связана только с одной родительской и по смыслу хранит информацию о характеристиках родительской сущности;

· ассоциативная – сущность, связанная с несколькими родительскими сущностями. Такая сущность содержит информацию о связанных сущностях;

· именуемая – частный случай ассоциативной сущности, не имеющий собственных атрибутов (только атрибуты родительских сущностей, мигрировавших в качестве внешнего ключа);

· категориальная – дочерняя сущность в иерархии наследования.

Иерархия наследования (subtyperelationship) или иерархия категорий представляет собой особый тип объединения сущностей, которые разделяют общие характеристики. Обычно иерархию наследования создают, когда несколько сущностей имеют общие по смыслу атрибуты, либо когда сущности имеют общие по смыслу связи, либо когда это диктуется бизнес-правилами.

Для каждой категории можно указать дискриминатор (discriminator) – атрибут родового предка, который показывает, как отличить одну категориальную сущность от другой.

Иерархии категорий делятся на 2 типа – полные и неполные. В полной иерархии категорий (Complete subtype relationship) одному экземпляру родового предка обязательно соответствует экземпляр в каком-либо потомке. Если же категория ещё не выстроена полностью и в родовом предке могут существовать экземпляры, которые не имеют соответствующих экземпляров в потомках, то такая категория будет неполной.

Неполная категория помечается символом , а полная .

Для создания иерархии необходимо использовать инструмент CompleteSub-category из панели ErwinToolbox ( ). Принцип соединения сущностей в данном случае аналогичен созданию простой связи (сначала выделяется предок, а затем потомок), но существует небольшое отличие: после создания первой связи необходимо соединить оставшиеся сущности не с родительской, а с символом категории.

После создания иерархии требуется заполнить сущности атрибутами, а также указать параметры для созданной категории. Для этого можно воспользоваться пунктом контекстного меню SubtypeProperties (рисунок 54).

Рисунок 54 - Доступ к диалоговому окну настроек иерархии

В качестве параметров иерархии следует указать её тип (полная категория или неполная) и дискриминатор и списка атрибутов родительской сущности (рисунок 55).

Рисунок 55 - Параметры иерархии

Учитывая выбранную предметную область (полиграфическое производство), выстраивать иерархию можно для имеющегося оборудования. В качестве дискриминатора следует использовать его тип. Пример неполной категории представлен на рисунке 56.

Рисунок 56 - Иерархия оборудования

Таким же образом логично перечислить производственные операции (рисунок 57).

Рисунок 57 - Иерархия производственных операций

Примером полной категории может служить классификация клиентов предприятия. Точно известно, что они могут быть либо физическим, либо юридическим лицом. Тогда возможно выстроить полную иерархию (рисунок 58).

Рисунок 58 - Полная иерархия клиентов

Связь «многие ко многим» (manytomanyrelationship) может быть создана только на уровне логической модели. Обязательным условием для связи такого типа является наличие Verb Phrase для каждого направления отношения сущностей. Такая связь необходима, если экземпляры одной сущности могут иметь связи с множеством экземпляров другой, экземпляры которой, в свою очередь, могут иметь множества связей с первой. Примером такого отношения в полиграфии могут являться связи сущностей «Цех» и «Продукция». Конкетная продукция может производиться во множестве цехой и, в то же время, в одном цеха может производиться множество типов продукции. Пример использования связей «многие ко многим» представлен на рисунке 59.

Рисунок 59 - Связи «многие-ко-многим»

Если между сущностями существует связь «многие-ко-многим», то, как правило, между ними в модели создается сущность типа «связь», которая кроме внешних ключей, соответствующих первичным ключам связываемых сущностей, может иметь собственные атрибуты. Для атоматического создания такой сущности-связи используется опция Create Assotiation Etity, которая запускает мастер преобразования связи «многие-ко-многим».