В процессе выполнения лабораторной работы Вы узнаете:

В процессе выполнения лабораторной работы Вы научитесь:

 

Неидентифицирующая связь

Неидентифицирующая связь как и идентифицирующая является связью типа "один - ко - многим".

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

 

При установлении неидентифицирующей связи дочерняя сущность остается независимой.

Неидентифицирующая связь служит для связывания независимых сущностей.

 Обозначение неидентифицирующей связи.

Неидентифицирующая связь отображается на диаграмме пунктирной линией с точкой на стороне дочерней сущности(рис.1).

В примере 1 между сущностью Сотрудник  и сущностью Проект установлена неидентифицирующая связь.

Рис.1 Пример неидентифицирующей связи.

Обратите внимание на форму  сущностей - и та и другая независимы!

Следствие установления неидентифицирующей связи.

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

В примере 1 в сущность Проект в результате установления связи из сущности Сотрудник мигрировал атрибут код сотрудника - в сущности Проект этот атрибут является внешним ключом(рис.1).

Построение неидентифицирующей связи

Технология отображения неидентифицирующей связи в модели

Для  отображения связи  необходимо:

  1. Определить связанные сущности и обосновать необходимость установки связи;
  2. Обосновать выбор типа связи;
  3. Определить направление связи - какая из сущностей родительская;
  4. Отобразить связь , используя соответствующий инструмент палитры инструментов;
  5. Присвоить имя связи;
  6. Указать мощность связи;
  7. Задать описание связи и ее специфические особенности.
 Установление неидентифицирующей связи между сущностями «Сотрудник» и «Проект»
  1. Определение связанных сущностей и обоснование необходимости установки связи.

Пусть при анализе предметной области было установлено, что

Вывод: Между сущностями Сотрудник и проект должна быть установлена связь.

  1. Выбор типа связи

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

Пусть в нашем примере номера проектов уникальны , тогда номер проекта - первичный ключ сущности Проект.

У сущности Сотрудник тоже свой первичный ключ.

Вывод: Можно использовать неидентифицирующую связь, так как обе сущности идентифицируются своими ключами.

  1. Определение направления связи

Для установления правильного направления связи необходимо проанализировать правила и ограничения предметной области и определить, какая  из сущностей будет родительской, а какая дочерней.

Воспользуемся  рекомендациями из предыдущей работы:

количество экземпляров первой  сущности количество экземпляров второй  сущности
1 проект 1 сотрудник
1 сотрудник N проектов

Для нашего примера 1 сотрудник - N проектов.

 Вывод: Родительская сущность - Сотрудник( именно он "подарит" свой первичный ключ сущности проект).

 Проект будет  в результате дочерней сущностью.

 

 

Помните!   

 Неправильный выбор  направления связи приведет к нарушению принципа атомарности атрибутов.

 

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

 

 

 

  1. Отображение связи  в модели

Для  того, чтобы установить неидентифицирующую связь, выполните следующие шаги:

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

При установлении неидентифицирующей связи (Рис.2) атрибуты первичного ключа Код сотрудника родительской сущности Сотрудник автоматически переносятся в состав неключевых атрибутов  дочерней сущности Проект. В дочерней сущности Проект новый атрибут помечается как внешний ключ - (FK).

Рис.2. Недентифицирующая связь между  сущностями

 

 

 

  1.  Именование связи

Задание 1.  Самостоятельно  задайте имя связи от сущности  Сотрудник к сущности проект.

6. Мощность связи

Напомним, что в случае связи типа "один-ко-многим" :

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

 

Задание 2. Задайте  мощность связи    Сотрудник  выполняет  Проект,

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

 

7. Описание связи

Для описания связи :

Рис.3. Вызов диалога для изменения свойств связи

Рис. 4. Описание связи .

Специфические особенности неидентифицирующей связи - обязательность связи.

Для неидентифицирующей связи нужно указать признак ее обязательности(Nulls).

В случае обязательной связи (No Nulls) при генерации схемы базы данных атрибут внешнего ключа получит признак NOT NULL(хотя и не входит в состав первичного ключа).

В случае необязательной связи (Nulls Allowed)  внешний ключ может принимать значение NULL.

Необязательная связь помечается прозрачным ромбом на стороне родительской сущности (рис.5).

Рис.5. Изображение необязательной неидентифицирующей связи.

Необязательность связи устанавливается при анализе предметной области (бизнес-правил и ограничений).

 

В нашем примере (рис.5) бизнес - правило может звучать так:

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

Для задания необязательности связи необходимо :

Рис.6. Вызов диалога для изменения свойств связи

Рис.7. Установка необязательности связи

 

Задание 3. Установите связь сущностей    Заказчик  и  Проект,

если известно, что

Опишите установленную связь;

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

Сохраните модель в файле Задание 4_3.

Унификация атрибутов.

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

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

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

Это комбинирование или объединение идентичных атрибутов называется унификацией.

Унификация производится, поскольку  запрещено существование в одной сущности двух атрибутов с одинаковыми именами.

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

Имя роли

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

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

 На рис.6 сущность Продажа валюты содержит информацию об акте обмена валюты, в котором участвуют две валюты – проданная и купленная.

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

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

В примере атрибуты получили имена ролей Проданная и Купленная.

Рис. 6. Имя роли внешнего ключа

Задание 4. Присвоение функционального имени атрибуту

Присвоим базовому атрибуту Код сотрудника сущности Сотрудник имя роли (функциональное имя) – Кто выполняет.

Для этого выполните следующие шаги:

  1. Вызовите контекстное меню щелчком по связи выполняет, выберите пункт Relationship Properties ;

  2.  В появившемся диалоге Relationships выберите закладку Rolename (рис.7);

  3.  В закладке Rolename в поле Rolename введите имя роли Кто выполняет для мигрировавшего первичного ключа Код сотрудника.

Рис. 7. Диалог Relationships: присвоение имени роли внешнему ключу

После выполнения задания сущность Проект должна иметь вид как на рис.8:

Рис.8. Сущность Проект после присвоения функционального имени атрибуту

 

Задание 5. В своих моделях определите сущности, между которыми должны быть установлены неидентифицирующие связи.
Установите нужные типы связей.
Задайте полное их описание.

Полученные результаты занесите в свой отчет в раздел "Идентификация связей" ( пример оформления  этой части отчета)

 

Контрольные вопросы.

  1. Когда устанавливается неидентифицирующая связь?
  2. Что такое необязательность связи и как она обосновывается?
  3. Как отображается неидентифицирующая необязательная связь?
  4. Что такое унификация атрибутов?
  5. Как на диаграмме отобразить имя роли и для чего это нужно?
  6. К чему приводит неправильный выбор типа связи?