DBML — компактный язык описания схемы БД: таблицы, колонки, связи. Модель удобно проектировать и обсуждать в DBML, а SQL для нужной СУБД получать автоматически.
Как получить SQL
- Откройте песочницу DBML и опишите схему (или возьмите пример — он уже открыт).
- Выберите Файл → Скачать → SQL: PostgreSQL (или MySQL, SQL Server, Oracle).
- Скачается файл .sql с DDL для выбранной СУБД.

Что генерируется
Enum status { new
paid }
Table users {
id int [pk, increment]
email varchar(255) [unique, not null, note: 'Почта']
}
Table orders {
id int [pk]
user_id int [ref: > users.id]
status status [default: 'new']
indexes { (user_id, status) }
}
- PostgreSQL: перечисление —
CREATE TYPE … AS ENUM, автоинкремент —GENERATED BY DEFAULT AS IDENTITY, заметки —COMMENT ON, внешние ключи —ALTER TABLE … ADD FOREIGN KEYв конце скрипта. - MySQL: перечисление —
ENUM(…)прямо в колонке,AUTO_INCREMENT, комментарии —COMMENT. - SQL Server:
IDENTITY(1, 1), перечисление — ограничениеCHECK (… IN (…)), пакеты разделеныGO. - Индексы —
CREATE INDEX, составные — по списку колонок. - Связь многие-ко-многим (
Ref: orders.id <> tags.id) — промежуточная таблицаorders_tagsс составным ключом и двумя внешними ключами.
Если экспорт недоступен
При ошибке в коде скачивание сообщит: «Экспорт невозможен: исправьте ошибки в коде». Ошибки DBML подсвечиваются в строках, на диаграмме остаётся последняя корректная версия.
Что ещё
- Обратно — из SQL в DBML: «SQL в DBML».
- Картинка схемы — «ER-диаграмма онлайн».
Вопросы и ответы
Можно ли получить скрипт изменений (ALTER) между двумя версиями модели? Нет, экспорт создаёт полный скрипт создания схемы. Миграции пишите инструментом миграций (Flyway, Liquibase); сравнить версии модели поможет история версий артефакта.
Как получить SQL для схемы, отличной от public? Укажите схему в имени таблицы: Table billing.invoices — она попадёт в DDL.
Поддерживается ли SQLite или ClickHouse? Экспорт — для PostgreSQL, MySQL, SQL Server и Oracle. Скрипт PostgreSQL или MySQL обычно легко адаптировать для близких СУБД.
Куда девается расположение таблиц? В SQL оно не нужно; оно хранится вместе с документом DBML в аккаунте.
