Гарантия того, что несколько полей 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 ответ:
1) Убедитесь, что ваш
tenant_id
определен какNOT NULL
в таблицахPeriod
,Unity
иShift
.2) Создайте следующие уникальные ключи на этих таблицах:
3) Определите столбец
- период (tenant_id, period_id)
- Unity (tenant_id, unity_id)
- Shift (tenant_id, shift_id)
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
.