dele

Архитектура и системы

ER-диаграмма базы данных онлайн

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

Модель данных заказовМодель данных: клиенты оформляют заказы, заказы содержат позиции, позиции ссылаются на товары.10..*11..*N1ОФОРМЛЯЕТСОДЕРЖИТССЫЛАЕТСЯENTITYКлиент# iduuidemailtextnametextENTITYЗаказ# iduuid→ customer_iduuidstatusenumplaced_attimestamptzENTITYПозиция→ order_iduuid→ product_iduuidqtyintENTITYТовар# iduuidskutextpricenumericЛЕГЕНДАСущностьСвязь · кратность 1 / NГлавная связь
Шаблон «Модель данных заказов» — er-диаграмма в Dele

Когда использовать

  • Модель данных нового сервиса до написания миграций
  • Объяснение предметной области команде или аналитикам
  • Раздел модели данных в дизайн-доке
  • Согласование агрегатов и связей между доменами

Как с ней работать в Dele

  • Сущность — название и поля с типом и ключом: pk, fk или uq. Показывайте поля, которые объясняют связи, а не все колонки.
  • Связи несут кратность с обеих сторон (fromCard, toCard): 1, 0..1, 1..*, 0..*, N — и необязательный глагол, например «оформляет». Стрелки не рисуются.
  • Не больше 8 сущностей. Если модель больше, разбейте её по агрегатам.
  • Акцент — на корне агрегата и, при необходимости, на одной ключевой связи (style accent).
  • Необязательные и слабые связи рисуйте пунктиром.

Три способа собрать диаграмму

Словами. Откройте ИИ-ассистента в редакторе или подключите своего агента по MCP и опишите задачу, например:

«Сделай ER-диаграмму интернет-магазина: покупатель, заказ, позиция заказа, товар, адрес доставки. Корень агрегата — заказ.»

В редакторе. Создайте диаграмму из шаблона «ER-диаграмма», меняйте элементы на холсте и в панели справа — раскладка пересчитывается сама.

Кодом. Диаграмма — это JSON-спецификация. Её можно править в панели «Спецификация», генерировать скриптом и хранить в git.

Спецификация примера (JSON)
{
  "type": "er",
  "title": "Модель данных заказов",
  "description": "Модель данных: клиенты оформляют заказы, заказы содержат позиции, позиции ссылаются на товары.",
  "direction": "LR",
  "nodes": [
    {
      "id": "customer",
      "label": "Клиент",
      "fields": [
        {
          "name": "id",
          "type": "uuid",
          "key": "pk"
        },
        {
          "name": "email",
          "type": "text",
          "key": "uq"
        },
        {
          "name": "name",
          "type": "text"
        }
      ]
    },
    {
      "id": "order",
      "label": "Заказ",
      "focal": true,
      "fields": [
        {
          "name": "id",
          "type": "uuid",
          "key": "pk"
        },
        {
          "name": "customer_id",
          "type": "uuid",
          "key": "fk"
        },
        {
          "name": "status",
          "type": "enum"
        },
        {
          "name": "placed_at",
          "type": "timestamptz"
        }
      ]
    },
    {
      "id": "item",
      "label": "Позиция",
      "fields": [
        {
          "name": "order_id",
          "type": "uuid",
          "key": "fk"
        },
        {
          "name": "product_id",
          "type": "uuid",
          "key": "fk"
        },
        {
          "name": "qty",
          "type": "int"
        }
      ]
    },
    {
      "id": "product",
      "label": "Товар",
      "fields": [
        {
          "name": "id",
          "type": "uuid",
          "key": "pk"
        },
        {
          "name": "sku",
          "type": "text",
          "key": "uq"
        },
        {
          "name": "price",
          "type": "numeric"
        }
      ]
    }
  ],
  "edges": [
    {
      "from": "customer",
      "to": "order",
      "fromCard": "1",
      "toCard": "0..*",
      "label": "оформляет"
    },
    {
      "from": "order",
      "to": "item",
      "fromCard": "1",
      "toCard": "1..*",
      "label": "содержит",
      "style": "accent"
    },
    {
      "from": "item",
      "to": "product",
      "fromCard": "N",
      "toCard": "1",
      "label": "ссылается"
    }
  ]
}

Когда выбрать другой формат

Вопросы о формате

Чем ER-диаграмма отличается от схемы БД?

ER-диаграмма описывает предметную область: сущности и кратность связей. Схема БД показывает физические таблицы, SQL-типы, индексы и правила ON DELETE.

Какую нотацию кратности поддерживает Dele?

Кратность пишется явно на каждом конце связи: 1, 0..1, 1..*, 0..* или N.

Сколько сущностей можно показать?

До восьми. Большую модель лучше разбить на несколько диаграмм по агрегатам.

Все форматы →

Компоненты, связи, границы доверия

Уровни абстракции и меры контроля

Классы, операции, наследование и композиция