Вы всё спланировали, написали документацию, продумали архитектуру — а при первом запуске всё равно посыпались ошибки. Разбираюсь, почему так происходит и что с этим делать.
База знаний
dbdiagram.io — визуальное проектирование баз данных через код
Онлайн-инструмент для проектирования ER-диаграмм на языке DBML: синтаксис, возможности, экспорт в SQL и тарифы
Бесплатный онлайн-инструмент для проектирования ER-диаграмм через код на языке DBML. Пишете описание таблиц и связей — получаете визуальную схему, готовую к экспорту в SQL.
Что это такое
dbdiagram.io — веб-приложение для визуализации структуры баз данных. Вместо того чтобы перетаскивать блоки мышкой, вы описываете таблицы, поля и связи на простом DSL-языке DBML (Database Markup Language). Диаграмма строится в реальном времени по мере набора кода.
Инструмент создан командой Holistics и бесплатен для базового использования. К февралю 2025 года через dbdiagram.io и dbdocs.io создано более 2,5 миллиона DBML-документов 1,4 миллиона пользователей.
Основные возможности
| Возможность | Описание |
| Код → диаграмма | Пишете DBML слева, справа мгновенно появляется визуальная ER-схема |
| Импорт из SQL | Загрузка схем из PostgreSQL, MySQL и SQL Server — из дампа или напрямую из базы |
| Экспорт в SQL | Генерация DDL-скриптов для PostgreSQL, MySQL и SQL Server |
| Экспорт в PDF и PNG | Готовые визуальные документы для обсуждения с командой |
| AI-ассистент | Описываете структуру на обычном языке — ИИ генерирует DBML-код |
| Совместная работа | Редактирование диаграмм в реальном времени несколькими участниками |
| Версионирование | История изменений схемы, откат к предыдущим версиям |
| Шеринг | Публичные и приватные ссылки на диаграмму |
DBML — язык описания схемы
DBML (Database Markup Language) — открытый DSL, спроектированный для описания структуры баз данных. В отличие от SQL DDL, 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), оберните его в двойные кавычки.Связи (Relationships)
Четыре типа связей:
| Символ | Тип | Пример |
> | Many-to-one | posts.user_id > users.id |
< | One-to-many | users.id < posts.user_id |
- | One-to-one | users.id - profiles.user_id |
<> | Many-to-many | 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]
}Enum
enum post_status {
draft [note: 'Ожидает публикации']
published
archived
}Индексы
Table bookings {
id integer
country varchar
booking_date date
indexes {
(id, country) [pk]
booking_date [type: hash]
(country, booking_date) [unique]
}
}TablePartial — переиспользуемые шаблоны полей
Если несколько таблиц имеют одинаковые поля (например, id, created_at, updated_at), вынесите их в partial:
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]
}Пример данных (Records)
Table users {
id int [pk]
name varchar
email varchar
records (id, name, email) {
1, 'Алиса', 'alice@example.com'
2, 'Борис', 'boris@example.com'
}
}Импорт и экспорт
Импорт существующей базы
Три способа:
- Из SQL-дампа — загрузите
.sqlфайл через интерфейс. ПоддерживаютсяCREATE TABLE,CREATE INDEXиALTER TABLE ADD - Из базы напрямую — подключитесь к PostgreSQL, MySQL или SQL Server через CLI-команду
db2dbml - Из DBML-файла — импорт готового
.dbml
Экспорт
- SQL DDL — для PostgreSQL, MySQL, SQL Server
- PDF / PNG — визуальные диаграммы
- DBML — исходный код схемы
CLI и npm-пакет
DBML распространяется как npm-пакет с CLI-инструментами для конвертации между форматами.
# Установка
npm install -g @dbml/cli
# DBML → SQL
dbml2sql schema.dbml --postgres -o schema.sql
# SQL → DBML
sql2dbml schema.sql --postgres -o schema.dbml
# Импорт схемы напрямую из базы
db2dbml postgres "postgresql://user:pass@localhost:5432/mydb" -o schema.dbml@dbml/cli@4.x, требуется Node.js версии 18.0.0 и выше.Для программной работы с DBML есть JS-модуль @dbml/core:
npm install @dbml/coreТарифы и лимиты
| План | Цена | Что входит |
| Personal (Free) | Бесплатно навсегда | Базовый редактор, ограниченное количество диаграмм, шеринг по ссылке |
| Personal Pro | Платная подписка | Неограниченные диаграммы, приватные схемы, продвинутые функции |
| Team | Платная подписка | Командные воркспейсы, совместное редактирование, управление доступом |
Практические сценарии
Проектирование схемы нового проекта
Опишите структуру в DBML, визуально проверьте связи на диаграмме, экспортируйте DDL и примените к базе. Файл database.dbml в корне репозитория становится живой документацией схемы — как README.md, только для базы данных.
Документирование существующей базы
Импортируйте схему из рабочей базы через db2dbml, получите диаграмму и DBML-код. Дополните note-аннотациями для полей и таблиц — и у вас готовая документация.
Обсуждение архитектуры в команде
Экспортируйте диаграмму в PDF, отправьте коллегам или поделитесь ссылкой на интерактивную версию. Правки вносятся в код, диаграмма обновляется мгновенно.
Миграция между СУБД
Импортируйте схему из одной СУБД (например, MySQL), а экспортируйте DDL для другой (например, PostgreSQL). DBML абстрагирован от конкретной базы, поэтому перенос структуры сводится к переключению формата экспорта.
Экосистема dbx
dbdiagram.io — часть семейства инструментов от Holistics:
| Инструмент | Назначение |
| dbdiagram.io | Визуализация ER-диаграмм из DBML |
| dbdocs.io | Генерация документации базы данных из DBML |
| runsql.com | Песочница для тестирования SQL-запросов |
Комьюнити и интеграции
DBML — open-source проект на GitHub. Сообщество создало парсеры и плагины для множества платформ:
- VS Code — подсветка синтаксиса и автодополнение (расширение vscode-dbml)
- JetBrains IDEs — плагин для IntelliJ, PyCharm, DataGrip
- Prisma — генератор DBML из Prisma-схемы (
prisma-dbml-generator) - Django — конвертер между
models.pyи DBML - Rails — генерация DBML из
schema.rb - Парсеры для Python, Go, Java, PHP, C#, Elixir
Ссылки
- dbdiagram.io — основной сервис
- Документация dbdiagram — руководство по интерфейсу
- Синтаксис DBML — полная спецификация языка
- DBML на GitHub — исходный код и npm-пакеты
- Сообщество — форум, баг-репорты и запросы фич
По теме
- Статья: Сайт как рабочий контур: почему pimenov.ai уже не просто портфолио
- Блог: Notion выкатил Dashboards — вид сверху для баз данных
- База знаний: Notion как Headless CMS: контент-движок для сайта
Если вы проектируете базу данных для нового продукта или наводите порядок в существующей схеме — и хотите разобраться, как встроить dbdiagram.io в свой рабочий контур, — пишите в Telegram @pimenovчй