Гарантия того, что несколько полей FK принадлежат одной строке в другой таблице.


В проекте SaS (программное обеспечение как услуга) представьте себе следующий сценарий:

Основной таблицей для клиентов, использующих приложение, являетсяtenant , а его первичным ключом является столбецid .

У меня есть 3 таблицы для управления данными от арендаторов и одна конкретная таблица для управления функциональностью вакансий :

Точка, Unity иShift все те, у когоPK id иFK tenant_id .

Моя таблица вакансия есть 3 внешних ключа

  • period_id-ссылки на таблицу "Period"
  • unity_id-ссылки на таблицу "Unity"
  • shift_id-ссылки на таблицу "Shift"

Теперь проблема:

Мне нужно гарантировать, что все эти 3 FK являются ссылками на строки в таблицах Period, Unity и Shift, которые принадлежат одному и тому же клиенту в таблице tenant.

Я был ясен в своем объяснении?

Может быть, я смогу создать триггер, чтобы займитесь этими проверками. Я действительно не знаю, есть ли у СГБД уже ресурсы для этого.

Для информации: я использую SQL Server с красноречивым ORM. Но, если действительно существует решение для этого, лучшим будет тот, кто работает везде.

1 2

1 ответ:

1) Убедитесь, что ваш tenant_id определен как NOT NULL в таблицах Period, Unity и Shift.

2) Создайте следующие уникальные ключи на этих таблицах:

  • период (tenant_id, period_id)
  • Unity (tenant_id, unity_id)
  • Shift (tenant_id, shift_id)
3) Определите столбец tenant_id для таблицы vacancy Как NOT NULL.

4) Определите следующие FKS на Таблице vacancy:

  • (tenant_id, period_id) период обращения (tenant_id, period_id)
  • (tenant_id, unity_id) ссылка на Unity (tenant_id, unity_id)
  • (tenant_id, shift_id) ссылка на Shift (tenant_id, shift_id)

Таким образом, вы можете гарантировать, что каждая связанная строка имеет один и тот же tenant_id.