dbdiagram.io — веб-сервис для проектирования и документирования структуры баз данных через код на языке DBML. Вы описываете таблицы, поля и связи, а через панель инструментов можете экспортировать построенную ER-диаграмму в PDF/PNG или сгенерировать SQL-код.
Что представляет собой dbdiagram.io
dbdiagram.io — инструмент команды Holistics для работы с диаграммами баз данных. Схема редактируется как текст в левом окне, а визуальное представление автоматически обновляется справа.
Основной формат сервиса — DBML (Database Markup Language), декларативный язык описания баз данных. Он не привязан к одной СУБД и обычно читается компактнее, чем SQL DDL.
Редактор построен на Monaco Editor, который используется в Visual Studio Code. К элементу диаграммы из кода ведут сочетания Ctrl/Command + F12 и Ctrl/Command + Click. Из диаграммы к определению в коде можно перейти двойным щелчком по таблице, колонке, связи или группе таблиц.
Основные возможности
| Возможность | Что даёт пользователю |
| DBML → диаграмма | Визуальная ER-схема обновляется по мере изменения кода |
| Импорт схемы | Преобразование существующей SQL-схемы или прямого подключения к базе в DBML |
| Экспорт | Генерация SQL, PDF и PNG через панель инструментов |
| Совместная работа | Личные и командные рабочие пространства, приглашения и редактирование в реальном времени |
| Версии и представления | История изменений и отдельные виды диаграммы для разных аудиторий |
| AI Assistant | Создание и изменение DBML по запросу на естественном языке с предварительным просмотром различий |
| Data Sample | Примеры записей рядом со схемой с импортом и экспортом SQL-данных |
| Data Lineage | Описание и визуализация движения данных между таблицами и колонками |
Базовый синтаксис DBML
Таблицы и поля
Table users {
id integer [pk, increment]
username varchar(50) [not null, unique]
email varchar(100) [not null, unique]
role varchar(20) [default: 'user']
created_at timestamp [default: `now()`]
}
Table posts {
id integer [pk, increment]
title varchar(255) [not null]
body text [note: 'Содержимое публикации']
user_id integer [not null]
status post_status
created_at timestamp [default: `now()`]
}pk, not null, unique, default, increment и note. Тип с пробелом, например double precision, заключайте в двойные кавычки.Связи между таблицами
DBML поддерживает четыре основных оператора:
| Оператор | Тип связи | Пример |
> | Многие к одному | posts.user_id > users.id |
< | Один ко многим | users.id < posts.user_id |
- | Один к одному | users.id - profiles.user_id |
<> | Многие ко многим | authors.id <> books.id |
Связь можно записать внутри поля или отдельным выражением:
Table posts {
id integer [pk]
user_id integer [ref: > users.id]
}
Ref: posts.user_id > users.id
Ref {
posts.user_id > users.id [delete: cascade, update: no action]
}С августа 2026 года в оператор можно добавлять ?, чтобы явно обозначить опциональную сторону связи:
Table posts {
id int [pk]
user_id int [ref: >? users.id]
}DBML также поддерживает составные внешние ключи и связи между таблицами из разных схем.
Enum, индексы и проверки
enum post_status {
draft [note: 'Ожидает публикации']
published
archived
}
Table bookings {
id integer
country varchar
booking_date date
amount decimal
indexes {
(id, country) [pk]
booking_date [type: hash]
(country, booking_date) [unique]
}
checks {
`amount > 0` [name: 'chk_positive_amount']
}
}Для индексов доступны одиночные и составные определения, выражения, первичные и уникальные ключи. В официальной спецификации среди явно поддерживаемых типов индекса указаны btree и hash.
Повторно используемые поля
TablePartial позволяет вынести общий набор полей, настроек и индексов:
TablePartial base_fields {
id int [pk, not null]
created_at timestamp [default: `now()`]
updated_at timestamp [default: `now()`]
}
Table users {
~base_fields
name varchar
email varchar [unique]
}
Table orders {
~base_fields
total decimal [not null]
user_id int [ref: > users.id]
}Примеры данных
С марта 2026 года DBML позволяет хранить демонстрационные записи рядом со схемой:
Table plans {
id int [pk]
name varchar
price decimal
records {
1, 'Free', 0
2, 'Pro', 8
3, 'Team', 15
}
}Можно также использовать внешний блок Records plans(id, name, price). Значения проверяются с учётом типа целевой колонки. Для каждой таблицы допускается один блок записей.
Представления и движение данных
DiagramView
Представления диаграммы можно хранить прямо в DBML. Это помогает показывать разным участникам только нужную часть большой схемы:
DiagramView "Sales Team" {
Tables {
customers
orders
products
}
}
DiagramView Engineering {
Tables {
users
sessions
events
}
Schemas {
core
analytics
}
}Именованные представления доступны на платных планах. На бесплатном плане можно фильтровать таблицы внутри DiagramView Default.
Data Lineage
С августа 2026 года DBML поддерживает зависимости данных через Dep. Связи Ref описывают структуру базы, а Dep показывает, как данные перемещаются и преобразуются:
Dep: stripe_payments -> daily_orders [note: 'Исключение отменённых платежей']
Dep monthly_revenue_build {
daily_orders.amount -> monthly_revenue.revenue
daily_orders.ordered_at -> monthly_revenue.month
refunds.amount -> monthly_revenue.refunds
note: 'Месячная агрегация с учётом возвратов'
}Data Lineage доступен на всех планах без ограничения размера проекта. Автоматическое чтение lineage из dbt-проектов и хранилищ в release notes от 21 августа 2026 года обозначено как будущая возможность, поэтому рассчитывать на него в текущем процессе не следует.
Импорт, экспорт и работа из терминала
Через веб-интерфейс схему задают в DBML; для существующих SQL-схем доступны импорт и получение DBML из прямого подключения в поддерживаемых сценариях. Затем диаграмму можно экспортировать в PDF, PNG либо SQL. Такой рабочий процесс удобен для первичного документирования существующей базы.
С июля 2026 года официальный пакет dbdiagram синхронизирует локальный .dbml с веб-диаграммой:
npm install -g dbdiagram
dbdiagram auth login
dbdiagram init --entry schema.dbml --diagram-id YOUR_DIAGRAM_ID
# Локальный DBML → веб-диаграмма
dbdiagram push
# Веб-диаграмма → локальный файл
dbdiagram pullКоманды push и pull передают схему и расположение таблиц. Для автоматизации в CI используется переменная DBDIAGRAM_TOKEN; реальный токен нельзя сохранять в репозитории или вставлять в пример команды.
Отдельная экосистема DBML включает конвертеры для командной строки и JavaScript-модуль @dbml/core, но версии и системные требования перед установкой следует проверять в актуальной документации.
AI Assistant и ограничения планов
AI Assistant создаёт и изменяет таблицы, связи, индексы и типы данных по запросу на естественном языке. Перед применением сервис показывает изменения в режиме сравнения.
Доступность и квота зависят от плана. В документации, проверенной 3 сентября 2026 года, AI Assistant указан для Personal Pro; там же приведены следующие месячные квоты:
| План | Квота AI Assistant |
| Personal Pro | 1 000 000 токенов |
| Пробный Team на 7 дней | 50 000 токенов на участника |
| Team | 2 000 000 токенов на участника |
| Organization | 4 000 000 токенов на участника |
| Enterprise | Без ограничения |
Квота расходуется и на запросы, и на ответы. После её исчерпания новые сообщения недоступны до первого дня следующего месяца.
Цены и состав планов могут меняться. Перед выбором подписки проверяйте текущие условия на сайте сервиса.
Полезные сценарии
Спроектировать схему нового приложения
Исходные данные: перечень сущностей и бизнес-правил. Опишите таблицы и связи в DBML, визуально проверьте кардинальность, затем экспортируйте SQL.
Результат: команда получает читаемую диаграмму и версионируемый файл схемы. Перед применением проверьте DDL в тестовой базе; визуально корректная диаграмма не гарантирует правильность ограничений и типов.
Задокументировать существующую базу
Импортируйте SQL-схему или получите DBML через поддерживаемое подключение, добавьте note к таблицам и колонкам, затем сохраните .dbml в репозитории.
Результат: структуру можно просматривать как диаграмму и обновлять через dbdiagram push. Этот сценарий описывает схему, но не заменяет документацию бизнес-смысла полей и процессов обновления данных.
Подготовить разные виды большой схемы
Добавьте DiagramView для отдельных команд или бизнес-направлений. Проверьте, что каждое представление содержит только нужные таблицы и схемы.
Результат: одна DBML-модель даёт несколько сфокусированных диаграмм. Для именованных представлений потребуется платный план.
Показать происхождение показателя
Опишите переходы между исходными и итоговыми таблицами через Dep, при необходимости укажите отдельные колонки и поясняющие заметки.
Результат: на одной диаграмме видны структура и маршрут данных. Автоматический импорт lineage из dbt или хранилища пока не заявлен как готовая функция.
Как проверить результат
Минимальная проверка для новой схемы:
- Вставьте в редактор определения двух связанных таблиц.
- Убедитесь, что обе таблицы появились в правой части интерфейса, а между ними отображается связь.
- Выполните экспорт SQL и проверьте наличие таблиц, первичных и внешних ключей.
- Если используется пакет
dbdiagram, выполнитеdbdiagram push, откройте связанную диаграмму и сравните схему и позиции таблиц. - Применяйте DDL сначала к тестовой базе и проверяйте результат средствами выбранной СУБД.
Официальные ссылки
- dbdiagram.io — веб-приложение
- Основы работы с редактором — ввод DBML, навигация и экспорт
- Спецификация DBML — таблицы, связи, индексы, проверки и записи
- Совместная работа и доступ — рабочие пространства, приватность и общий доступ
- AI Assistant — возможности и текущие квоты
- Release Notes — история обновлений
Следующий шаг
Notion Dashboards: комбинированные представления
Схема как код особенно полезна, когда её читают разные участники команды и изменения нужно проверять до применения к базе. Если вы выстраиваете такой процесс, его границы и порядок проверки можно обсудить.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov


