Установление связей между сущностями

Для установления связей между сущностями и создания внешних ключей ERWin предоставляет возможность разделения типов связей на несколько вариантов:

• идентифицирующая связь — связь, определяющая однозначное соответствие экземпляра одной сущности единственному экземпляру связанной сущности и, как правило, описывает связь 1:1, но при реализации сцепленного первичного ключа может реализовывать связь один — ко — многим (1:JV);

• неидентифицирующая связь — связь, реализующая тип связи один — ко — многим (1 :N), представляя внешний ключ в связанной сущности в качестве простого атрибута, на который могут быть наложены определенные дополнительные ограничения по сравнению с обычными информационными атрибутами;

• множественная связь — связь, реализующая тип связи многие — ко — многим (ЛГ:М), представляется только на уровне логической модели, иллюстрируя соединение между сущностями, но не создавая внешних ключей в связанных сущностей;

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

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

Инструментальное средство ERWin, при установлении связей между сущностями, определяет два вида сущностей:

• родительская (Parent) — является базовой сущностью, первичный ключ которой может мигрировать в связанную сущность;

• дочерняя (Child) — определяется сущностью, которая при установлении связи получает внешний ключ, формируемый из мигрирующего первичного ключа родительской сущности.

Такое разделение выглядит вполне логичным, поскольку, исходя из особенностей выстраивания связей и логики предметной области, сведения, описываемые родительской сущностью, являются агрегирующими в отношении к данным, описываемым дочерней сущностью. Например, рассматривая связь между сущностями "Клиент" и "Заказ", конкретный клиент, представляемый экземпляром сущности "Клиент", объединяет (агрегирует) множество заказов, которые он создал в электронном мага-

зине. В результате, сущность "Заказ" по отношению к сущности "Клиент" можно рассматривать в качестве дочерней, а сущность "Клиент" — родительской.

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

Рис. 3.15. Базовое описание связи в ERWin


Колонка "Name" в описании связи предоставляет разработчику возможность указать наименование, отражающее смысловую нагрузку связи. Это важная составляющая модели, позволяющая однозначно понимать суть и смысл установленной связи, что, в итоге, должно помочь провести корректную нормализацию модели базы данных, правильным образом перераспределив отдельные атрибуты между сущностями.

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

Три важнейшие базовые характеристики связи (рис. 3.16), формирующие основную суть связи, описываются в первой закладке "General" и представляют тип связи, наименование связи, кардинальность (мощность). Эти параметры связи всегда обязательно должны быть определены и правильным образом описаны. Кроме наименования связи, остальные характеристики будут перенесены при соответствующей трансформации в физическую модель, а потом и в базу данных.

Первая характеристика связи определяет ее тип (рис. 3.17): идентифицирующая или не идентифицирующая. При этом, выбирая соответствующий тип связи, разработчик имеет возможность (для не идентифицирующей связи) уточнять отсутствие экземпляра по родительской сущности, разрешая тем самым для внешнего ключа указывать пустое значение "NULL".

Рис. 3.16. Основные характеристики связи в РЖ Win


Обычно, при установлении не идентифицирующей связи параметр "Null Option" устанавливается в значение "Nulls Not Allowed" (NULL недопустим). Это определяется особенностями работы с данными, в соответствии с которыми дочерний экземпляр данных должен быть связан с родительским экземпляром. Но иногда бывают случаи, когда это не соблюдается. Как правило, такая ситуация возникает, когда объекты предметной области, объединяемые этой связью, являются равнозначными и невозможно однозначно определить первоочередность появления экземпляра той или иной сущности. Тогда устанавливается значение "Null Allowed" (NULL допускается), как это показано в примере (см. рис. 3.17).

Рис. 3.17. Определение типа связи в ERWin


Поскольку связи один — к — одному и один — ко — многим являются родственными и различия в них заключаются только в мощности и некоторых более жестких требованиях, то переключение между этими типами связей можно осуществлять в рамках диалогового окна настройки связи, переводя связь из типа "Не идентифицирующая" в тип "Идентифицирующая". В этом случае параметр "Null Option" будет недоступен

для настройки. Объясняется это тем, что при установке идентифицирующей связи получаемый в дочерней сущности внешний ключ одновременно является первичным ключом, а правилами построения базы данных первичный ключ не может хранить пустого значения. Поэтому для полученного внешнего ключа устанавливается параметр "Null Not Allowed" (NULL недопустим).

Другой характеристикой, которая дает возможность переходить от связи один — к — одному к связи один — ко — многим и наоборот, является кардинальность. Установление кардинальности (мощности) связи в рамках свойств "Cardinality" и "Cardinality Value" задает правила наполнения экземплярами дочерней сущности (рис. 3.18). Предусматривается четыре варианта кардинальности, определяемые средством ERWin:

• Zero, One or More (ноль, один или много) — для дочерней сущности возможно любое количество экземпляров, связанных с одним экземпляром родительской сущности, включая вариант отсутствия экземпляров;

• (Р) One or More (один или много) — количество экземпляров дочерней сущности, связанных с одним экземпляром родительской сущности, может быть любым, но при создании экземпляра в родительской сущности в дочерней сущности экземпляры уже должны существовать, что требует установления параметра "Null Option" в значение "Nulls Allowed", разрешая хранение пустого значения "NULL" во внешнем ключе, полученном при установлении связи;

• (Z) Zero or One (ноль или один) — определяется связь один — к - одному, разрешая существование не более одного экземпляра данных в дочерней сущности;

• Cardinality Value (значение кардинальности) — указывает точное количество связанных экземпляров в дочерней сущности, что может быть реализовано только при варианте параметра "Null Option" в значении "Nulls Allowed", первичном создании экземпляров в дочерней сущности и последующим их увязыванием с экземпляром в родительской сущности.

Рис. 3.18. Определение кардинальности (мощности) связи в ERWin


В результате указания кардинальности (мощности) связи на модели в диаграмме будет отображено ее буквенно-цифровое обозначение. Если выбирается вариант кардинальности (мощности) в варианте "Один или много", то будет отображена литера "Р", в случае кардинальности "Ноль или один" — литера "Z", в случае указания точного числового значения — указанное значение, в других вариантах не будет отображаться никаких обозначений на модели.

Еще одна характеристика связи описывается в качестве основной - смысловое наполнение связи (рис. 3.19), обозначаемое глагольной формой.

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

Рис. 3.19. Описание смыслового наполнения связи в ERWin


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

Рис. 3.20. Описание правил миграции ключей в ERWin


Решение этих задач реализуется через механизм "Role Name", где разработчик указывает имя атрибута для внешнего ключа, как оно должно быть представлено в модели базы данных и, в итоге трансформации, в базе данных. Область "Role Name Info" содержит две колонки:

• Migrated Attribute (мигрирующий атрибут) — показывает атрибут родительской сущности, который представляется внешним ключом в связанной дочерней сущности (изменению не подлежит);

• Role Name (имя роли) — обозначает новое значение названия атрибута внешнего ключа, которое должно использоваться вместо имени мигрирующего атрибута.

Указание нужного названия атрибута в колонке "Role Name" приведет к переименованию атрибута внешнего ключа и последующего использования нового имени атрибута во всех элементах модели базы данных, где это будет необходимо.

Определение правил ссылочной целостности (рис. 3.21) является этапом физического моделирования базы данных. Связано это с тем, что отдельные правила для некоторых СУБД могут быть недоступны. Тем не менее, ERWin на этапе логического моделирования предоставляет возможность указать правила ссылочной целостности для формируемых связей. На этом этапе разработчику предлагается максимальный набор правил[1]:

• None (отсутствует) — правило, предполагающее любые действия пользователя без влияния на другие элементы базы данных;

• No Action (без действия) — правило, предполагающее определенные разработчиком действия;

• Restrict (запретить) правило, запрещающее выполнение операции над данными, если проверочное условие выполняется;

• Cascade (каскадно) — правило, выполняющее последовательные действия над связанными данными в соответствии с действием, выполняемым над данными, к которым определено данное правило;

• Set Null (установить NULL) — правило, устанавливающее значение NULL внешнему ключу для связанных экземпляров;

• Set Default (установить умолчание) — правило, устанавливающее значение по умолчанию, определенное для внешнего ключа связанного экземпляра.

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

Рис. 3.21. Определение правил ссылочной целостности в ЕКШіп


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

Рис. 3.22. Пример реализации связи категоризации в ERWin


Связь категоризации организуется в форме множества связей один к — одному, объединенных специализированным графическим элементом. Для ее реализации в ЕИЛУт необходимо:

• при первом указании связи выбрать пиктограмму связи и последовательно выбрать сущность-общность и одну из сущностей-категорий;

• остальные сущности-категории с помощью той же пиктограммы связи категоризации соединять путем последовательного выбора графического элемента и очередной сущности-категории.

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

Связь категоризации бывает двух типов, один из которых необходимо определить при установлении этого типа связи (рис. 3.23). Для обозначения различий в типе связи категоризации обозначение графического элемента будет представляться с двумя чертами или одной чертой (табл. 3.1).

Рис. 3.23. Определение типа связи категоризации в ERWin


Таблица 3.1

Тины связи категоризации и обозначения в ERWin

Обозначение

Описание

о

Complete (полная связь категоризации) — во всех сущностях- категориях будут содержаться экземпляры из сущности-общности, показывая необходимость полного описания (по всем сущностям-категориям) каждого экземпляра из сущности- общности

Incomplete (неполная связь категоризации) — экземпляр из сущности-общности может быть определен в одной или нескольких сущностях-категориях, включая возможность отсутствия экземпляра во всех сущностях-категориях



Для самой связи категоризации никакие прочие характеристики не определяются, и разработчику предоставляется только возможность просмотра структуры связи категоризации (рис. 3.24). Это описание дает возможность увидеть, какие сущности-категории определены подтипами (subtypes), а какая сущность-общность представлена надтипом (supertype).

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

Рис. 3.24. Описание связи категоризации в ЕИ\Чп