Entity Relationship Diagrams (диаграммы взаимосвязей сущностей)

  • Диаграмма взаимосвязи сущностей (или ER - модель) описывает взаимосвязанные обстоятельства, дела, ситуации, представляющие интерес в определенной области знаний.
  • Базовая модель ER состоит из типов сущностей (которые классифицируют объекты) и определяют отношения, которые могут существовать между сущностями.
  • Обратите внимание, что практики моделирования ER, почти всегда называют типы сущностей просто сущностями.


  • Например, тип объекта CUSTOMER будет называться просто объектом CUSTOMER. Технически сущность - это абстрактный экземпляр типа сущности, и это то, что показывает диаграмма ER - абстрактные экземпляры и отношения между ними.
  • Имена сущностей часто пишутся с заглавной буквы, хотя общепринятого стандарта на этот счет не существует, и в Mermaid это не требуется.
  • Связи между сущностями представлены линиями с конечными маркерами. Mermaid использует самую популярное обозначение связей - crow's foot (“гусиная лапка”). Эта взаимосвязь интуитивно передает возможность множества экземпляров сущности, с которой она соединяется.
  • Диаграммы ER могут использоваться для различных целей, начиная от абстрактных логических моделей, лишенных каких-либо деталей, и заканчивая физическими моделями таблиц реляционных баз данных.




erDiagram
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER {
        string name
        string custNumber
        string sector
    }
    ORDER ||--|{ LINE-ITEM : contains
    ORDER {
        int orderNumber
        string deliveryAddress
    }
    LINE-ITEM {
        string productCode
        int quantity
        float pricePerUnit
    }
  • При включении атрибутов в диаграммы ER необходимо определить, следует ли включать внешние ключи в качестве атрибутов. Это зависит от того, насколько точно должны быть представлены структуры реляционных таблиц.
  • Например, структура данных JSON может реализовать отношение “один ко многим” без необходимости свойств внешнего ключа, используя массивы. Также для моделей, предназначенных для реляционной реализации, можно определить, что включение атрибутов внешнего ключа дублирует информацию, уже отображаемую взаимосвязями, и не добавляет смысла сущностям.

Синтаксис

Сущности и отношения

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

  • Синтаксис Mermaid для диаграммы с ER совместим с PlantUML, с расширением обозначения взаимосвязи. Каждое утверждение состоит из следующих частей:
 <first-entity> [<relationship> <second-entity> : <relationship-label>]
  • Где:
  1. first-entity - имя сущности. Имена должны начинаться с буквенного символа, а также могут содержать цифры, дефисы и символы подчеркивания.
  2. relationship - описывает способ взаимодействия обеих сущностей.
  3. second-entity - имя другого объекта.
  4. relationship-label - описывает взаимосвязь с точки зрения первого объекта.
  • Например:
 PROPERTY ||--|{ ROOM : contains
  • Это утверждение можно интерпретировать как свойство, содержащее одну или несколько пространств, а оно является частью одного и только одного свойства. Можно увидеть, что метка здесь задана с точки зрения первого объекта: свойство содержит пространство, но оно не содержит свойства.
  • При рассмотрении с точки зрения второго объекта эквивалентную метку просто вывести.
  • Только первая часть инструкции является обязательной. Это позволяет показать объект без связей, что может быть полезно при итеративном построении диаграмм. Если указаны какие-либо другие части инструкции, то все части являются обязательными.

Синтаксис взаимосвязей (отношений)

  • Взаимосвязи каждого утверждения могут быть разбиты на три подкомпонента:
  1. Количество элементов первого объекта по отношению ко второму;
  2. Придает ли связь идентичность “дочернему” объекту;
  3. Количество элементов второго объекта по отношению к первому.
  • Количество элементов (мощность) - это свойство, которое описывает, сколько элементов другой сущности может быть связано с рассматриваемой сущностью.

  • В приведенном выше примере, PROPERTY (свойство) может иметь один или несколько экземпляров ROOM, связанных с ним, тогда как ROOM может быть связан только с одним PROPERTY (свойством).

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

    Значение (слева) Значение (справа) Содержание (описание)
    |o o| Ноль или один
    || || Ровно один
    }o o{ Ноль или более (без верхнего предела)
    }| |{ Один или несколько (без верхнего предела)

Идентификация

  • Отношения могут быть классифицированы как идентифицирующие или не идентифицирующие, и они отображаются сплошными или пунктирными линиями соответственно. Это необходимо, когда одна из рассматриваемых сущностей не может иметь независимого существования без другой.
  • Например, фирме которая страхует людей для вождения автомобилей, может потребоваться хранить данные о зарегистрированных водителях. При моделировании, можно было начать с того, что автомобилем может управлять много экземпляров person, а человек может управлять многими автомобилями - обе сущности могут существовать друг без друга, так что это неидентифицируемое отношение, которое мы могли бы указать в Mermaid как: PERSON }|..|{ CAR : "driver".
  • Обратите внимание на две точки в середине отношения, которые приведут к тому, что между двумя объектами будет проведена пунктирная линия взаимосвязи. Когда это отношение “многие ко многим”, преобразуется в два отношения “один ко многим”, мы видим, что зарегистрированный водитель не может существовать как без человека, так и без автомобиля - отношение становятся идентифицирующими и будут указаны с помощью дефисов, которые визуализируются в сплошную линию.
erDiagram
    CAR ||--o{ NAMED-DRIVER : allows
    PERSON ||--o{ NAMED-DRIVER : is


Атрибуты (свойства)

  • Атрибуты могут быть определены для сущностей путем указания имени сущности, за которым следует блок, содержащий несколько пар имен типов, где блок разделен открывающими и закрывающими фигурными скобками {}. Например:



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

Ключи свойств и комментарии

  • Атрибуты могут иметь определенный ключ или комментарий. Ключи могут быть "PK" или "FK" для первичного или внешнего ключа. А комментарий определяется двойными кавычками в конце атрибута. Сами комментарии не могут содержать двойные кавычки.



Другие действия

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

Стили

Параметры конфигурации

  • Для простой настройки цвета:

    Название Для чего используется
    fill Цвет фона объекта или атрибута
    stroke Цвет границы объекта или атрибута, цвет линии связи

Используемые классы

  • Для более богатого стиля доступны следующие селекторы классов css:

    Селектор Описание
    .er.attributeBoxEven Поле, содержащее атрибуты в четных строках
    .er.attributeBoxOdd Поле, содержащее атрибуты в строках с нечетными номерами
    .er.entityBox Поле, представляющее сущность
    .er.entityLabel Метка для объекта
    .er.relationshipLabel Ярлык для отношений
    .er.relationshipLabelBox Поле, окружающее метку связи
    .er.relationshipLine Строка, представляющая связь между сущностями