Два внешних ключа, только один может быть не нулевым одновременно - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть таблица базы данных с двумя внешними ключами, указывающими на две разные таблицы. Деловая логика c требует отношения "либо или"; только один внешний ключ может быть NOT NULL в любой момент времени.

Вот четыре возможных состояния, которые внешние ключи могут хранить в зависимости от бизнес-логики c:

  • NULL, NULL - в порядке
  • номер, NULL - в порядке
  • NULL, номер - в порядке
  • номер, номер - недопустимая бизнес-логика c

Я использую Django, и я знаю, что могу написать несколько проверок onSave (), которые справятся с этим, но это выглядит как hacki sh.

Есть ли лучший способ для разобраться с этим бизнес логи c?

1 Ответ

2 голосов
/ 27 апреля 2020

Используйте ограничение check:

alter table t add constraint chk_table_fk1_fk2 on table
    check (fk1 is null or fk2 is null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...