База знаний

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-oneposts.user_id > users.id
<One-to-manyusers.id < posts.user_id
-One-to-oneusers.id - profiles.user_id
<>Many-to-manyauthors.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'
  }
}

Импорт и экспорт

Импорт существующей базы

Три способа:

  1. Из SQL-дампа — загрузите .sql файл через интерфейс. Поддерживаются CREATE TABLE, CREATE INDEX и ALTER TABLE ADD
  2. Из базы напрямую — подключитесь к PostgreSQL, MySQL или SQL Server через CLI-команду db2dbml
  3. Из 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Платная подпискаКомандные воркспейсы, совместное редактирование, управление доступом
💡
Бесплатного плана достаточно для большинства индивидуальных задач — проектирование схемы, экспорт SQL, публикация по ссылке.

Практические сценарии

Проектирование схемы нового проекта

Опишите структуру в 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 в свой рабочий контур, — пишите в Telegram @pimenovчй