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

Связи


Разделение отношения "многие ко многим"

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

Рисунок 7-5. Разделение связи типа "многие ко многим" через добавление граничной сущности

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

Понятие исключительности

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

Представление

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

Рисунок 7-6. Исключающая дуга

Место пересечения может быть жирно обведено, и тогда простое пересечение дугой одной из линий связи будет говорить о том, что эта связь не вступает с другими связями, пересеченными той же дугой, в отношение взаимного исключения. Другой способ представления показан на Рисунке 7-8.



Рисунок 7-8

Если с одной и той же сущностью связано несколько исключающих дуг, для наглядности представления изображайте их на расстоянии друг от друга (Рисунок 7-9).

Правила

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

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


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


  • Проиллюстрируем некоторые из правил с помощью рисунка:

    Рисунок 7-9.



    Синтаксис

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



    Рисунок 7-10. Реальный пример с исключающей дугой



    Каждый КУПОН должен оформляться на один и только один РЕЙС (на конкретную дату) или быть открытым для одного и только одного АВИАМАРШРУТА (идентифицируемого номером рейса, но не датой, т.е. имеет место открытый купон/билет).

    Обратный синтаксис

    Используя обратный синтаксис, получаем:

    Это означает, что у нас никогда не может быть КУПОНА, не оформленного на конкретный РЕЙС (с конкретной датой) и в то же время не открытого для СТАНДАРТНОГО РЕЙСА (с номером). Так ли это?

    Обратите внимание на то, что мы воспользовались именами атрибутов (дабы придать информации большую определенность).

    Недопустимые комбинации

    Рисунок 7-11. Дуги, изображенные с нарушением правил



    Каждая из изображенных дуг не проходит логическую проверку.

    Необычные дуги

    Рисунок 7-12. Дуга на конце связи со степенью "один"



    Такая схема означает, что сущность A часто бывает связана с набором вхождений сущности B или с набором вхождений сущности C, но никогда с их комбинацией.

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

    Непереносимые связи

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


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

    Представление

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

    Рисунок 7-13. Пример



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

    Синтаксис

    При чтении связи можно добавить фразу типа "и никогда не может быть перенесена".

    Каждый КУПОН должен входить в один и только один БИЛЕТ и никогда не может быть перенесен в другой БИЛЕТ.

    Обратный синтаксис позволяет дать утвердительный ответ во всех случаях.

    Оценка степени мощности связи

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

    Представление

    При указании степени мощности используйте символы =, >, >=, <, <=.

    Рисунок 7-14. Пример 1



    Каждый ГОД может включать в себя от одного до двенадцати МЕСЯЦЕВ.

    Рисунок 7-15. Пример 2



    Каждый СЧЕТ должен принадлежать одной или двум ЛИЧНОСТЯМ. (Т.е. разрешаются общие счета.)

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

    Рисунок 7-16. Пример 3



    Рисунок 7-17. Диаграмма распределения



    Вершины на диаграмме соответствуют:

  • обычным счетам


  • счетам с отсроченными платежами


  • просроченным счетам (т.е. счетам, по которым подозревается обман и объявлен розыск)


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

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

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

  • степень (мощность)


  • описание




  • обязательность (по возможности с оценкой)


  • замечания


  • а также все, что сопутствующее этой связи:

  • сущности (ровно две)


  • дуги (не более одной)


  • уникальные идентификаторы


  • функции, в которых она используется.


  • Полностью определение связи описано в Приложениях B и C. Там же приведен набор примеров описания связей, который может помочь вам в случае каких-либо возникающих у вас затруднений.

    Избыточная связь

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

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

    Рисунок 7-18. Пример



    На первый взгляд схема представляется правдоподобной и действительно отражает структуру некоторых купонов; тем не менее, связь между КУПОНОМ и РЕЙСОМ уже недвусмысленно идентифицирует как АВИАМАРШРУТ, так и АВИАЛИНИЮ, делая тем самым две другие связи сущности КУПОН избыточными.

    Каскадное удаление

    В реальной жизни, если мы напрочь забываем о чем-то, то мы забываем тем самым и о всех связанных с этим вещах.

    Так, например, если вы удаляете все связанное с БИЛЕТОМ, вы удалите тем самым и все связанное с КУПОНОМ. КУПОНЫ (потомки) существуют только в контексте БИЛЕТА (родительской сущности).

    Такое действие называется "каскадным удалением" и имеет отношение к сущностям, имеющим потомков и связи типа "многие".

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

    Так, например, нельзя удалить сущность ЭКИПАЖ до тех пор, пока в нем есть какие-то ЧЛЕНЫ.

    Признак каскадного удаления

    Статус каскадного удаления отражается с помощью специального признака:

    X = Удалить всех потомков, если удаляется родитель

    C = Помешать удалению родителя в случае существования хотя бы одного потомка

    N = Родитель и потомок удаляются отдельно друг от друга.

    Признак имеет значение C обычно тогда, когда потомок связан с родителем обязательной связью (must be).

    Значение N свидетельствует о том, что связь является необязательной с обеих сторон.

    Каскадная коррекция

    Относится только к уровню реализации проекта и используется только при наличии системы управления реляционной БД (СУРБД). При изменении значения уникального идентификатора/первичного ключа родителя, новое значение автоматически заносится во все внешние ключи.

    Каскадное удаление и коррекция успешно реализуются с помощью СУРБД и генераторов прикладных программ.


    Содержание раздела