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

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

4 этап построения логической модели данных.

Идентификация отношений между сущностями и определение типов отношений (связей)

Еще одним  элементом диаграммы «сущность-связь» является отношение.

 

Отношение в самом общем виде представляет собой связь между двумя  сущностями.

 

Другими словами:

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

     а отношения    показывают, как эти типы данных     взаимоувязаны     друг с другом.

 

Введение подобных отношений преследует две основополагающие цели:

Связи

Связь - это логическое выражение отношений  сущностей.

 Каждая связь должна именоваться глаголом или глагольной фразой (Relationship Verb Phrases) (рис.1).

Имя связи выражает некоторое ограничение или бизнес-правило и облегчает чтение диаграммы, например:

Пример 1. Система должна позволять учитывать проекты: определять перечень проектов каждого клиента и перечень проектов, которые выполняет каждый сотрудник.

 

В этом случае можно именовать связи следующим образом:

Рис.1. Пример имен связей - Relationship Verb Phrases

В данном примере (рис1.) связи показывают, какие именно  проекты заказал заказчик и какой именно сотрудник выполняет проект.

Идентификация связей.

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

 

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

 

Идентификация связей  между сущностями может быть выполнена 2 способами:

1 способ.

 

 Анализируются отношения между объектами предметной области,

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

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

В примере 1 использован именно этот способ (рис 1). Так как надо определять перечень проектов каждого клиента и перечень проектов, которые выполняет каждый сотрудник, то необходимо установить связи между сущностями Заказчик и Проект , а также между сущностями  Сотрудник и Проект.

 

2 способ.

 

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

 

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

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

Новая сущность телефон заказчика будет связана с исходной , так как была выделена из нее.

Рис.2 Связь между исходной и выделенной сущностью

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

Для каждой связи укажите  способ выделения и обоснование  ее установления - бизнес правило .

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

 

Правила отображения  и описания связей в модели.

Каждая связь в модели должна иметь:

  1.  имя;

  2.  полное описание;
  3.  соответствующее графическое отображение.

Правила именования связей.

Имя связи должно быть :

  1. информативно - выражать некоторое ограничение или бизнес-правило;
  2. уникально;
  3. выражено глаголом или глагольной фразой;
  4. именовать отношения в том и другом направлении (от первой сущности ко второй и в обратном направлении). (рис.3).

Рис.3. Именование связей.

Задание 2. Определите имена всех  связей в своей модели.

В разделе отчета Идентификация связей добавьте и заполните столбец Имя связи ( пример оформления).

Требования к описанию связей

Полное описание каждой связи должно включать:

  1. Указание типа связи;
  2. Указание направления связи;
  3. Мощность связи;
  4. Описание(Definition)
  5. Дополнительные характеристики, существенные только для данного типа связи.

Типы связей

ERwin поддерживает несколько типов связей:

  1. связи типа «один-ко-многим»:

  1.     связь типа «многие-ко-многим»;

  2.    категориальная связь.

Связи «один-ко-многим»

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

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

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

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

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

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

 

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

 

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

 

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

На рис.4 сущность Проект  является зависимой.

 

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

 

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

 

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

 

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

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

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

 

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

Мигрировавшие атрибуты называются внешними ключами.

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

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

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

 

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

 

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

Внешний ключ обозначается  как (FК).

 

FK является сокращением от Foreign Key (внешний ключ).

На рис.5 - в сущности телефон заказчика  внешний ключ-Код заказчика.

 

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

 

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

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

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

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

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

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

  1. Выбор типа связи
Выбор типа связи производится в ходе анализа предметной области.

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

Пусть в  нашем примере номера проектов состоят из 2 частей - кода заказчика и номера проекта у этого заказчика (например, номер третьего проекта у второго заказчика выглядит как 2.3).

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

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

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

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

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

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

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

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

 

 

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

 

В нашем примере выбор сущности Проект в качестве родительской приведет к миграции  ее первичного ключа (Номер проекта) в область первичных ключей сущности Заказчик(рис.6).

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

 

 

Рис.6. Неправильный выбор направления связи

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

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

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

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

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

Отображение внешних ключей

Если внешние ключи не отображаются, то измените режим отображения сущностей, используя пункт контекстного меню Entity Display(рис.8)

 

 

Рис.8. Изменение режима отображения внешних ключей

 

Отображение миграции атрибутов при установлении связей

Если при установлении связи миграция атрибутов не отображается, то измените режим отображения сущностей, используя пункт контекстного меню Entity Display (рис.9)

 

 

Рис.9. Изменение режима отображения миграции атрибутов.

 

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

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

Рис. 10. Вызов диалога Relationships

Имя будет характеризовать отношение от родительской сущности Заказчик к дочерней сущности Проект .

Рис.11. Диалог Relationships

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

Для отображения имени связи  в модели измените режим отображения связей(рис.12).

Рис.12. Изменение режима отображения связей

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

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

 

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

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

Различают четыре типа мощности:

Задание 4. Определите  мощность связи Заказчик заказывает Проект.

 Для этого необходимо :

  1. Определить  тип мощности

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

Вывод: Заказчик должен иметь хотя бы 1 проект или много проектов, следовательно - мощность данной связи - 1 или много, то есть Р.

  1.  Обозначить мощность этой связи:

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

Рис. 14. Установление типа связи

Для отображения мощности  в модели измените режим отображения связей(рис.15)

Рис.15. Изменение режима отображения мощностей

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

Рис.16. Отображение имени и мощности связи.

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

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

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

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

Задание 5. Установите идентифицирующую связь между  сущностями Проект и Сотрудник.
Задайте полное ее описание :

Сохраните модель  в файле     Задание3_5  в своей папке.

Удаление связи

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

Рис.19. Окно запроса об подтверждении удаления связи.

 

Задание 6. Удалите связи, установленные   между сущностями Проект и Сотрудник и между сущностями Заказчик и Проект.

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

 

 

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

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

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

 

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

  1. Какие виды сущностей Вы знаете?
  2. Как они отображаются на диаграмме?
  3. Что такое связь? И как она должна именоваться?
  4. Назовите способы идентификации связей.
  5. Какие типы связей Вам известны?
  6. Что такое идентифицирующая связь? Когда она устанавливается ?
  7. Как определить направление связи? К чему приведет неправильный выбор направления связи?
  8. Что происходит при установлении идентифицирующей связи?
  9. Как удалить внешний ключ?
  10. Каково назначение внешнего ключа?
  11. Если  в модели  при установлении связи не отображаются внешние ключи и миграция атрибутов, то в чем причина и как ее устранить?
  12. Что такое мощность?
  13. Как определяется и задается мощность связи?
  14. Назовите типы мощности.
  15. Как изменить режим отображения связи?