Нотация Чена
Нотация названа по имени своего создателя — Питера Чена. Существует с 1976 года и легла в основу многих других нотаций для создания ER-моделей.
Итак, ER-модель состоит из базовых элементов: сущность, атрибут сущности и связь. Для каждого из них в нотации Чена есть графические обозначения.
Представим, что мы разрабатываем систему для cети городских больниц и нужно представить модель данных этой системы с помощью нотации Чена.
1. Сущность
Этот элемент нотации обозначается прямоугольником, но может меняться в соответствии с типом сущности: независимой, зависимой или ассоциативной.
1.1. Независимая сущность названа так, потому что она присутствует в системе всегда, независимо от наличия отношений с другими сущностями. Для отображения независимых сущностей используют прямоугольник.
Пример:
В нашем кейсе независимые сущности — это больница, врач и пациент. Данные о больнице присутствуют в системе независимо от того, привязаны к ней пациенты или нет. Информация о враче тоже может храниться в системе, даже если он пока не связан ни с одной больницей.
1.2. Зависимая сущность, наоборот, зависит от других сущностей в системе. На диаграмме она обозначается прямоугольником в двойной рамке.
Получается, что независимая сущность является родительской, а зависимая — дочерней. Чтобы идентифицировать экземпляр дочерней сущности, понадобится ключ родительской.
Пример:
Допустим, в нашей сети будет сто больниц, а в каждой больнице — кабинет № 1. Значит, нужно сто экземпляров кабинета № 1. Чтобы однозначно определить нужный кабинет № 1 (дочернюю сущность), потребуется связь с больницей (родительской сущностью).
1.3. Есть ещё один вид сущности в нотации Чена — ассоциативная сущность.
Пример и определение ассоциативной сущности приведём позже, когда разберёмся с тем, как связывать сущности между собой.
2. Атрибут
Все атрибуты имеют форму овала и связываются с сущностью прямыми линиями.
Пример:
Добавим в диаграмму несколько атрибутов, которые характерны для каждой сущности. Например, у каждого врача будет табельный номер, фамилия и специализация.
2.1. Первичный ключ позволяет однозначно выделить один экземпляр сущности из многих. Название такого атрибута подчёркивается.
Пример:
У врачей и пациентов есть фамилии, но людей с одинаковой фамилией может быть много, поэтому по значению атрибута «Петров» не получится однозначно идентифицировать конкретного врача или пациента. В модели логического уровня используется такой первичный ключ, который имеет отношение к предметной области и при этом уникален для каждого экземпляра сущности.
Больница и кабинет однозначно определяются по номеру, врача мы можем определить по табельному номеру, а пациента будем идентифицировать по СНИЛС.
2.2. Если у сущности может быть несколько экземпляров одного и того же атрибута, то такой атрибут помещается в двойной овал и называется множественным атрибутом.
Пример:
Когда вы идете к стоматологу, он может быть одновременно стоматологом-терапевтом, ортодонтом и гигиенист. Каждая специализация — это экземпляр атрибута «специализация».
2.3. У сущности могут быть атрибуты, которые зависят от других, — это производные атрибуты. Их овал обозначается пунктиром.
Пример:
Добавим пациенту ещё один атрибут — возраст. Он будет зависеть от даты рождения, поэтому его нужно выделить пунктиром.
2.4. При необходимости атрибуты можно разложить на составные атрибуты.
Пример:
Мы могли бы вписать адрес больницы одной строкой, но его можно разложить на составные атрибуты: индекс, улицу, номер дома.
3. Связь
Этот элемент нотации соединяет все виды сущностей и показывает отношения между ними.
В нотации Чена для обозначения связей используются ромбы, которые содержат в себе пояснение, каким образом сущности связаны между собой.
Пример:
К больнице прикрепляются пациенты, например, по месту жительства. Поэтому сущности «Больница» и «Пациент» будут связаны. А вот связи между сущностями «Врач» и «Страховой полис» не будет, так как врач никак не взаимодействует с полисом пациента.
Обозначить связь между сущностями недостаточно — нужно ещё определить тип и характеристику этой связи.
3.1. Тип связи
- Идентифицирующая связь обозначается двойной линией и говорит о том, что каждый экземпляр сущности должен быть связан с другой сущностью.
- Неидентифицирующая связь обозначается одной линией и указывает на то, что не каждый экземпляр сущности должен быть связан с другой сущностью. В системе могут быть сущности без связей.
Пример:
Врач связан с больницей идентифицирующей связью, а значит, каждый врач в системе должен быть прикреплён к больнице. При этом больница связана с врачом неидентифицирующей связью, значит, не во всех больницах должны быть врачи (возможно, одна из больниц закрыта на ремонт).
3.2. Кардинальность (или мощность) — это характеристика, которая показывает, уникальна ли связь между сущностями, то есть сколько экземпляров разных сущностей связаны между собой. Кардинальность обозначается цифрой или переменной рядом с линией связи.
3.2.1. Один к одному (1:1) — экземпляр сущности связан только с одним экземпляром другой сущности. Это высокая кардинальность связи.
Пример:
Введём ещё одну сущность — страховой полис. У пациента полис может быть только один. И наоборот, полис уникален и привязан к конкретному пациенту.
3.2.2. Один ко многим (1:N) — один экземпляр сущности связан с несколькими экземплярами другой сущности.
Пример:
Все пациенты прикрепляются к больнице. Таким образом, одна больница может быть связана с несколькими пациентами. При этом один пациент может быть связан только с одной больницей.
3.2.3. Многие ко многим (M:N) — несколько экземпляров сущности связаны с несколькими экземплярами другой сущности.
Пример:
Врачи могут вести приём в разных больницах города. Это значит, что каждый экземпляр сущности «Врач» связан с несколькими экземплярами сущности «Больница» (N). И, конечно, в больнице работает не один врач, а сразу несколько (M).
Обратите внимание, что рядом с символами N и M могут быть конкретные числа или диапазон. Они указываются в скобках: например, диапазон M (1; 10).
Пример:
Один врач должен работать в пяти больницах.
Один врач может работать в нескольких больницах, от одной до пяти.
Напомним, что если связь между экземплярами сущностей неидентифицирующая, то есть необязательная, то она обозначается одинарной линией, — в этом случае цифра 0 не ставится. Если же нужно указать диапазон, то 0 используется. Например, диапазон M (0; 5) означает, что связей может быть от нуля до пяти.
Теперь вернёмся к понятию «ассоциативная сущность», или, как её ещё называют, «промежуточная сущность».
Если между сущностями устанавливается связь «многие ко многим», то такая связь принимает вид ассоциативной сущности. Ромб, обозначающий связь, помещается в прямоугольник — так мы показываем, что элемент находится в промежуточном состоянии между связью и сущностью. Впоследствии такие ассоциативные сущности могут трансформироваться в полноценные сущности со своими атрибутами.
Пример:
Один врач может принимать нескольких пациентов, а один пациент может наблюдаться одновременно у нескольких врачей. Связь между этими сущностями — «многие ко многим», значит, она должна трансформироваться в ассоциативную сущность. На более поздних этапах работы над ER-моделью данных эта ассоциативная сущность может стать полноценной сущностью «Приём» с атрибутами в виде даты и времени приёма, назначенных анализов и пр. Подробнее об этом вы узнаете в следующих уроках.
Итак, мы описали основные элементы нотации Чена, которых будет достаточно для графического представления модели данных логического уровня. Давайте посмотрим, что у нас получилось.