Документация / DBML
Связи и внешние ключи
Определение связей
Связи задают внешние ключи между таблицами, в том числе в разных схемах:
Table posts {
id integer [primary key]
user_id integer [ref: > users.id] // многие к одному
}
Table users {
id integer [ref: < posts.user_id, ref: < reviews.user_id] // один ко многим
}
Типы связей
| Оператор | Тип | Пример |
|---|---|---|
< | один ко многим | users.id < posts.user_id |
> | многие к одному | posts.user_id > users.id |
- | один к одному | users.id - user_infos.user_id |
<> | многие ко многим | authors.id <> books.id |
Необязательные связи
Модификатор ? делает сторону связи необязательной: >? — необязательна ссылаемая сторона,
?> — необязательна исходная сторона.
Table posts {
id int [pk]
user_id int [ref: >? users.id]
}
Три формы записи
Длинная форма:
Ref name_optional {
schema1.table1.column1 < schema2.table2.column2
}
Короткая форма:
Ref name_optional: schema1.table1.column1 < schema2.table2.column2
Встроенная форма — в настройках столбца:
Table schema2.table2 {
id integer
column2 integer [ref: > schema1.table1.column1]
}
Составные внешние ключи
Ref: merchant_periods.(merchant_id, country_code) > merchants.(id, country_code)
Связи между схемами
Table core.users {
id integer [pk]
}
Table blogging.posts {
id integer [pk]
user_id integer [ref: > core.users.id]
}
// или отдельно
Ref: blogging.posts.user_id > core.users.id
Настройки связи
Ref: products.merchant_id > merchants.id [delete: cascade, update: no action]
Ref {
products.merchant_id > merchants.id [delete: cascade, update: no action]
}
Ссылочные действия для delete и update: cascade, restrict, set null, set default, no action.
Связь «многие ко многим»
Есть два способа описать её:
- одной связью с оператором
<>; - двумя связями «многие к одному» (
>и<) через промежуточную таблицу.
Похожие инструменты
Обновлено: 27 сентября 2026 г.
