Документация / DBML
Модульная система
Большой файл DBML трудно читать и поддерживать. Модульная система позволяет разбить схему на несколько файлов: по предметным областям, с общими определениями и импортом только нужного.
В редакторе «Помощника» диаграмма строится по одному файлу; раздел описывает синтаксис для полноты.
Импорт всего
Импортирует всё, что экспортирует файл:
use * from './path-to-file'
./path-to-file — относительный путь к файлу; расширение .dbml можно не указывать
('./base' и './base.dbml' равнозначны).
// base.dbml
Table users {
id int [pk]
}
Table orders {
id int [pk]
}
// main.dbml — доступно всё из ./base.dbml
use * from './base'
Ref: orders.user_id > users.id
Выборочный импорт
Импорт всего может приводить к конфликтам имён. Выборочный импорт подключает только указанные элементы:
use {
type name
type name // можно перечислить несколько элементов
} from './path-to-file'
type— вид элемента:table,enum,tablepartial,note,schemaилиtablegroup;name— имя элемента в исходном файле.
Остальные элементы не видны и не вызывают конфликтов.
Виды импортируемых элементов
| Ключевое слово | Что импортируется |
|---|---|
table | таблица (вместе с её записями и связями) |
enum | перечисление |
tablepartial | TablePartial |
note | заметка на холсте |
schema | все элементы схемы |
tablegroup | группа таблиц (все таблицы группы) |
Регистр ключевых слов не важен (Table, TABLE и table равнозначны).
// auth.dbml
Table auth.users {
id int [pk]
email varchar
}
Table auth.roles {
id int [pk]
name varchar
}
Table auth.sessions {
id int [pk]
}
TableGroup auth_core {
auth.users
auth.roles
}
// здесь доступны таблицы u и r
use {
table auth.users as u
table auth.roles as r
} from './auth'
// здесь доступны auth.users, auth.roles, auth.sessions
use {
schema auth
} from './auth'
// здесь доступны auth_core, auth.users, auth.roles
use {
tablegroup auth_core
} from './auth'
Псевдонимы при импорте
Если в двух файлах есть элементы с одинаковыми именами, переименуйте их с помощью as:
// auth.dbml
Table users {
id int [pk]
email varchar
}
// billing.dbml
Table users {
id int [pk]
amount decimal
}
use {
table users as auth_users
} from './auth'
use {
table users as billing_users
} from './billing'
После переименования доступно только новое имя.
Реэкспорт: reuse
use делает элементы доступными только в текущем файле. Файл, который импортирует текущий,
их не увидит:
// common/index.dbml
use * from './users'
use * from './orders'
// main.dbml — users и orders здесь НЕ доступны
use * from './common/index'
reuse дополнительно делает элементы видимыми для файлов, импортирующих текущий:
// common/index.dbml
reuse * from './users'
reuse * from './orders'
// main.dbml — users и orders доступны
use * from './common/index'
reuse удобен, чтобы открыть часть схемы другим файлам, не заставляя их знать внутреннюю структуру папок.
Особенности
useне транзитивен. Еслиa.dbmlимпортируетb.dbml, аb.dbmlчерезuseимпортируетc.dbml, элементыc.dbmlвa.dbmlнедоступны. Для передачи дальше используйтеreuse.- Циклические импорты допустимы. DBML декларативен, поэтому файлы могут ссылаться друг на друга:
например,
users.dbmlимпортирует изorders.dbmlи наоборот.
Похожие инструменты
Обновлено: 27 сентября 2026 г.
