dele

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

Схема базы данных онлайн

«Схема БД» показывает физическую схему: реальные таблицы с SQL-типами, ограничениями, индексами и внешними ключами, проведёнными от колонки к колонке. Это то, что смотрят на ревью миграции, — а не разговор о предметной области.

Схема магазина: public и billingФизическая схема магазина: заказы, позиции, товары и клиенты в public, счета в billing; удаление заказа каскадно удаляет его позиции.BILLINGON DELETE RESTRICTON DELETE CASCADEON DELETE RESTRICTON DELETE RESTRICTpublic.customersTABLEidPKuuidemailUQNNtextcreated_atNNtimestamptzpublic.ordersTABLEidPKuuidcustomer_idFKNNuuidstatusNNtexttotalNNnumeric(12,2)placed_atNNtimestamptzИНДЕКСЫidx_orders_customer_ididx_orders_statuspublic.productsTABLEidPKuuidskuUQNNtextnameNNtextpriceNNnumeric(12,2)+ ещё 3 колонкиИНДЕКСЫuq_products_skupublic.order_itemsTABLEidPKuuidorder_idFKNNuuidproduct_idFKNNuuidqtyNNintegerunit_priceNNnumeric(12,2)billing.invoicesTABLEidPKuuidorder_idFKNNuuidissued_atNNtimestamptzЛЕГЕНДАТаблицаГруппа схемыВнешний ключ (колонка → колонка)Разрушающее удаление (CASCADE)
Шаблон «Схема магазина: public и billing» — схема бд в Dele

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

  • Ревью миграции базы данных
  • Документация таблиц одной подсистемы
  • Разбор каскадного удаления и связей между таблицами
  • Схема для нового разработчика: где лежат данные и как связаны

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

  • До 5 таблиц с полным именем «schema.table». У колонки — имя, настоящий SQL-тип и чипы pk, unique, notNull; чип FK ставится автоматически.
  • Показывается до 8 строк; скрытые колонки отмечайте полем more («+ N ещё») — ничего не обрезается молча. Индексы — только важные.
  • Внешние ключи (до 6): дочерняя таблица и колонка → родительская таблица и колонка (по умолчанию id). Всегда указывайте onDelete — это первое, что ищет ревьюер.
  • Таблицы не из схемы по умолчанию (public) группируются пунктирной рамкой схемы.
  • Акцент — только на разрушительном ключе ON DELETE CASCADE и таблице, в которую идёт каскад. Нет каскада — нет акцента.
  • Не рисуйте все колонки всех таблиц и не ставьте чипы на каждую строку.

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

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

«Нарисуй схему БД заказов в Postgres: customers, orders, order_items, products с типами колонок и внешними ключами. Удаление заказа каскадно удаляет позиции.»

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

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

Спецификация примера (JSON)
{
  "type": "db-schema",
  "title": "Схема магазина: public и billing",
  "description": "Физическая схема магазина: заказы, позиции, товары и клиенты в public, счета в billing; удаление заказа каскадно удаляет его позиции.",
  "defaultSchema": "public",
  "tables": [
    {
      "id": "customers",
      "name": "public.customers",
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "pk": true
        },
        {
          "name": "email",
          "type": "text",
          "unique": true,
          "notNull": true
        },
        {
          "name": "created_at",
          "type": "timestamptz",
          "notNull": true
        }
      ]
    },
    {
      "id": "orders",
      "name": "public.orders",
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "pk": true
        },
        {
          "name": "customer_id",
          "type": "uuid",
          "notNull": true
        },
        {
          "name": "status",
          "type": "text",
          "notNull": true
        },
        {
          "name": "total",
          "type": "numeric(12,2)",
          "notNull": true
        },
        {
          "name": "placed_at",
          "type": "timestamptz",
          "notNull": true
        }
      ],
      "indexes": [
        "idx_orders_customer_id",
        "idx_orders_status"
      ]
    },
    {
      "id": "products",
      "name": "public.products",
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "pk": true
        },
        {
          "name": "sku",
          "type": "text",
          "unique": true,
          "notNull": true
        },
        {
          "name": "name",
          "type": "text",
          "notNull": true
        },
        {
          "name": "price",
          "type": "numeric(12,2)",
          "notNull": true
        }
      ],
      "more": 3,
      "indexes": [
        "uq_products_sku"
      ]
    },
    {
      "id": "items",
      "name": "public.order_items",
      "focal": true,
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "pk": true
        },
        {
          "name": "order_id",
          "type": "uuid",
          "notNull": true
        },
        {
          "name": "product_id",
          "type": "uuid",
          "notNull": true
        },
        {
          "name": "qty",
          "type": "integer",
          "notNull": true
        },
        {
          "name": "unit_price",
          "type": "numeric(12,2)",
          "notNull": true
        }
      ]
    },
    {
      "id": "invoices",
      "name": "billing.invoices",
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "pk": true
        },
        {
          "name": "order_id",
          "type": "uuid",
          "notNull": true
        },
        {
          "name": "issued_at",
          "type": "timestamptz",
          "notNull": true
        }
      ]
    }
  ],
  "fks": [
    {
      "from": "orders",
      "column": "customer_id",
      "to": "customers",
      "onDelete": "restrict"
    },
    {
      "from": "items",
      "column": "order_id",
      "to": "orders",
      "onDelete": "cascade",
      "focal": true
    },
    {
      "from": "items",
      "column": "product_id",
      "to": "products",
      "onDelete": "restrict"
    },
    {
      "from": "invoices",
      "column": "order_id",
      "to": "orders",
      "onDelete": "restrict"
    }
  ]
}

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

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

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

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

Что делать, если в таблице много колонок?

Показывается до восьми строк, а остальные отмечаются счётчиком «+ N». Выбирайте колонки, которые объясняют ключи и ограничения.

Поддерживаются ли несколько схем Postgres?

Да. Таблицы не из схемы по умолчанию объединяются пунктирной рамкой своей схемы, например billing.

Все форматы →

Сущности, поля, кратность

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

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