Неидентифицирующая связь как и идентифицирующая является связью типа "один - ко - многим".
Неидентифицирующая связь устанавливается между двумя сущностями в том случае, если каждая сущность идентифицируется своим первичным ключом.
При установлении неидентифицирующей связи дочерняя сущность остается независимой.
Неидентифицирующая связь служит для связывания независимых сущностей.
Обозначение неидентифицирующей связи.
Неидентифицирующая связь отображается на диаграмме пунктирной линией с точкой на стороне дочерней сущности(рис.1).
В примере 1 между сущностью Сотрудник и сущностью Проект установлена неидентифицирующая связь.
Рис.1 Пример неидентифицирующей связи.
Обратите внимание на форму сущностей - и та и другая независимы!
Следствие установления неидентифицирующей связи.
В примере 1 в сущность Проект в результате установления связи из сущности Сотрудник мигрировал атрибут код сотрудника - в сущности Проект этот атрибут является внешним ключом(рис.1).
Для отображения связи необходимо:
Пусть при анализе предметной области было установлено, что
Вывод: Между сущностями Сотрудник и проект должна быть установлена связь.
По определению, неидентифицирующая связь устанавливается, если обе сущности идентифицируются с помощью первичных ключей, состоящих только из своих атрибутов.
Пусть в нашем примере номера проектов уникальны , тогда номер проекта - первичный ключ сущности Проект.
У сущности Сотрудник тоже свой первичный ключ.
Вывод: Можно использовать неидентифицирующую связь, так как обе сущности идентифицируются своими ключами.
Для установления правильного направления связи необходимо проанализировать правила и ограничения предметной области и определить, какая из сущностей будет родительской, а какая дочерней.
Воспользуемся рекомендациями из предыдущей работы:
количество экземпляров первой сущности | количество экземпляров второй сущности |
1 проект | 1 сотрудник |
1 сотрудник | N проектов |
Для нашего примера 1 сотрудник - N проектов.
Вывод: Родительская сущность - Сотрудник( именно он "подарит" свой первичный ключ сущности проект).
Проект будет в результате дочерней сущностью.
Помните!
Неправильный выбор направления связи приведет к нарушению принципа атомарности атрибутов.
Неправильный выбор типа связи приведет к нарушению требования компактности первичного ключа дочерней сущности (в нем появится "лишний" атрибут - атрибут, мигрировавший из первичного ключа родительской сущности).
Для того, чтобы установить неидентифицирующую связь, выполните следующие шаги:
Выберите тип создаваемого элемента –
неидентифицирующая связь с помощью кнопки
в палитре инструментов;
Щелкните мышкой сначала по родительской сущности Сотрудник, а затем по дочерней сущности Проект.
Неидентифицирующая связь отобразится на диаграмме пунктирнойной линией с жирной точкой на дочернем конце связи, то есть на сущности Проект.
При установлении неидентифицирующей связи (Рис.2) атрибуты первичного ключа Код сотрудника родительской сущности Сотрудник автоматически переносятся в состав неключевых атрибутов дочерней сущности Проект. В дочерней сущности Проект новый атрибут помечается как внешний ключ - (FK).
Рис.2. Недентифицирующая связь между сущностями
Именование связи
Задание 1. Самостоятельно задайте имя связи от сущности Сотрудник к сущности проект.
6. Мощность связи
Напомним, что в случае связи типа "один-ко-многим" :
Мощность показывает, какое количество экземпляров дочерней сущности связано с одним экземпляром родительской сущности.
если известно, что среди сотрудников есть люди, выполняющие параллельно несколько заказов и новички, не имеющие ни одного проекта.
7. Описание связи
Для описания связи :
Рис.3. Вызов диалога для изменения свойств связи
В появившемся окне диалога на вкладке Definition введите описание связи - бизнес правила , касающиеся отношения, которое она выражает (рис.4)
Рис. 4. Описание связи .
Специфические особенности неидентифицирующей связи - обязательность связи.
Для неидентифицирующей связи нужно указать признак ее обязательности(Nulls).
В случае обязательной связи (No Nulls) при генерации схемы базы данных атрибут внешнего ключа получит признак NOT NULL(хотя и не входит в состав первичного ключа).
В случае необязательной связи (Nulls Allowed) внешний ключ может принимать значение NULL.
Рис.5. Изображение необязательной неидентифицирующей связи.
Необязательность связи устанавливается при анализе предметной области (бизнес-правил и ограничений).
В нашем примере (рис.5) бизнес - правило может звучать так:
Можно сохранять информацию о проекте, если не известно пока, кто его будет выполнять. То есть, поле код сотрудника не является обязательным для заполнения, можно заполнить информацию о проекте, сохранить ее, а информацию о сотруднике ввести позднее.
Для задания необязательности связи необходимо :
Рис.6. Вызов диалога для изменения свойств связи
В появившемся окне диалога на вкладке General в поле Nulls, выберите режим Nulls Allowed(рис.7)
Рис.7. Установка необязательности связи
если известно, что
Опишите установленную связь;
Обоснуйте в Definition необходимость установки, направление, мощность, необязательность.
Сохраните модель в файле Задание 4_3.
Унификация атрибутов.
Зависимая сущность может иметь один и тот же внешний ключ, пришедший к ней из нескольких родительских сущностей.
Сущность может также получить один и тот же внешний ключ несколько раз от одного и того же родителя через несколько разных связей.
Когда ERwin обнаруживает одно из этих событий, он распознает, что два атрибута одинаковы, и помещает атрибут внешнего ключа в зависимой сущности только один раз.
Это комбинирование или объединение идентичных атрибутов называется унификацией.
Унификация производится, поскольку запрещено существование в одной сущности двух атрибутов с одинаковыми именами.
Есть случаи, когда унификация нежелательна. Например, когда два атрибута имеют одинаковые имена, но на самом деле они отличаются по смыслу и необходимо, чтобы это отличие отражалось в диаграмме. В этом случае необходимо использовать имена ролей атрибутов внешнего ключа.
Имя роли (функциональное имя) – это синоним атрибута внешнего ключа, который показывает, какую роль играет атрибут в дочерней сущности.
Имена роли применяются в том случае, если два или более атрибута одной сущности определены по одной и той же области, т.е. имеют одинаковую область значений, но разный смысл.
На рис.6 сущность Продажа валюты содержит информацию об акте обмена валюты, в котором участвуют две валюты – проданная и купленная.
Информация о валютах содержится в сущности Валюта. Следовательно, сущности Продажа валюты и Валюта должны быть дважды связаны и первичный ключ Номер валюты должен дважды мигрировать в сущность Продажа валюты в качестве внешнего ключа.
Необходимо различать эти атрибуты, которые содержат информацию о номере проданной и купленной валюты (имеют разный смысл), но они ссылаются на одну и ту же сущность Валюта (имеют общую область значений.
В примере атрибуты получили имена ролей Проданная и Купленная.
Рис. 6. Имя роли внешнего ключа
Присвоим базовому атрибуту Код сотрудника сущности Сотрудник имя роли (функциональное имя) – Кто выполняет.
Для этого выполните следующие шаги:
Вызовите контекстное меню щелчком по связи выполняет, выберите пункт Relationship Properties ;
В появившемся диалоге Relationships выберите закладку Rolename (рис.7);
В закладке Rolename в поле Rolename введите имя роли Кто выполняет для мигрировавшего первичного ключа Код сотрудника.
Рис. 7. Диалог Relationships: присвоение имени роли внешнему ключу
После выполнения задания сущность Проект должна иметь вид как на рис.8:
Рис.8. Сущность Проект после присвоения функционального имени атрибуту
Полученные результаты занесите в свой отчет в раздел "Идентификация связей" ( пример оформления этой части отчета)