Архитектура и системы
ER-диаграмма базы данных онлайн
«ER-диаграмма» показывает сущности предметной области и отношения между ними с кратностью. Это разговор о модели данных — что такое заказ и кому он принадлежит, — а не список всех колонок.
Когда использовать
- Модель данных нового сервиса до написания миграций
- Объяснение предметной области команде или аналитикам
- Раздел модели данных в дизайн-доке
- Согласование агрегатов и связей между доменами
Как с ней работать в 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": "ссылается"
}
]
}Когда выбрать другой формат
- Реальные таблицы с SQL-типами, индексами и ON DELETE → Схема БД
- Классы с методами, наследованием и композицией → UML: диаграмма классов
- Движение данных между системами → Поток данных по ролям
Вопросы о формате
Чем ER-диаграмма отличается от схемы БД?
ER-диаграмма описывает предметную область: сущности и кратность связей. Схема БД показывает физические таблицы, SQL-типы, индексы и правила ON DELETE.
Какую нотацию кратности поддерживает Dele?
Кратность пишется явно на каждом конце связи: 1, 0..1, 1..*, 0..* или N.
Сколько сущностей можно показать?
До восьми. Большую модель лучше разбить на несколько диаграмм по агрегатам.