Документация / 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перечисление
tablepartialTablePartial
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 г.