Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_указания_ERWin.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.14 Mб
Скачать

4. Определение логических взаимосвязей

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

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

  • организация оказывает много услуг,

  • самолет перевозит много пассажиров,

  • продавец продает много продуктов.

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

Кроме взаимосвязи «один-ко-многим» существует еще один тип – это «многие-ко-многим». Этот тип связи описывает ситуацию, при которой эк­земпляры сущностей могут взаимодействовать с несколькими экземпля­рами других сущностей. Связь «многие-ко-многим» используют на перво­начальных стадиях проектирования. Этот тип взаимосвязи отображается сплошной линией с точками на обоих концах.

Опять-таки следует различать взаимосвязь и конкретные ее проявления. Если мы определим взаимосвязь между «Заказ» и «Сотрудник» и назовем ее «Составляет», то одно из проявлений этого отношения будет связывать Иванова с Заказом №1.

Рассмотрим для начала взаимосвязь между сущностями «Заказ» и «Сотрудник». В первую очередь, определим эту взаимосвязь (назовем ее). Очевидно, что сотрудник и заказ соотносятся как «Сотрудник составляет заказ». Таким образом, взаимосвязь имеет имя – «Составляет» и определяет сущность «Сотрудник» как главную, «Заказ» – как подчиненную.

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

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

Рисунок 16 – Класс принадлежности сущностей

Далее необходимо определиться, является ли связь «один – к – одному», «одни – ко – многим» или «многие – ко – многим». Очевидно, что заказ может быть составлен только одним сотрудником (за исключением особенностей бизнеса), а один сотрудник может составить сколь угодно много заказов. Таким образом, связь является «один – ко – многим», обозначается так, как показано на рисунке 17.

Рисунок 17 – Связь «один – ко – многим»

Перейдем к реализации взаимосвязей в ERWin. Для отображения отношений между сущностями используются инструменты, изображенные на рисунке 18.

Рисунок 18 – Инструменты создания связей

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

Для включения ключевого поля одной сущности в составной ключ другой, необходимо воспользоваться инструментом Identifying relationship (слева). Для включения ключевого поля одной сущности в состав атрибутов другой, необходимо воспользоваться инструментом Non-identifying relationship (справа).

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

Для обозначения же связи «многие–ко–многим» используется инструмент Many-to-many relationship (по центру).

Итак, мы определили, что связь между сущностями «Заказ» и «Сотрудник» – «один–ко–многим». Но для идентификации заказа нет необходимости использовать составной ключ, поэтому включим поле «Номер сотрудника» в состав атрибутов сущности «Заказы», используя инструмент «Non-identifying relationship». Для этого, после выбора инструмента, щелкнем левой клавишей по сущности «Сотрудник», а затем – левой клавишей по сущности «Заказ». В результате чего появилась связь. Для обозначения этой связи необходимо дважды щелкнуть по ней, чтобы открыть окно свойств связи (рисунок 19). И в поле Parent-to-Child записать название связи (глагол). Таким образом, связь сущностей «Сотрудник» и «Заказ» отобразится так, как представлено на рисунке 20.

Рисунок 19 – Обозначение связи

Рисунок 20 – Связь сущностей “Сотрудник” и “Заказ”

Если название связи не отображается, то необходимо щелкнуть правой клавишей по любому пустому месту диаграммы и выбрать из контекстного меню Relationship Display → Verb Phrase (рисунок 21).

Рисунок 21 – Настройка отображения наименования связи

Далее перейдем к связи сущностей «Заказ» и «Товар». Эта связь является связью «многие–ко–многим», т.к. один товар может включаться во множество заказов, а один заказ может иметь множество товаров. Таким образом, каждая из сущностей является обязательной. Сущность «Заказ» – главная (Parent), «Товар» – подчиненная (Child).

Значит, для отображения связи воспользуемся инструментом Many-to-many relationship.

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

Рисунок 22 – Двойное имя связи

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

Рисунок 23 – Логическая модель предметной области «Сведения о товарах и заказах»