Garantir que plusieurs champs FK appartiennent à la même ligne dans une autre table

Sur un projet SaS (Software as a Service), imaginez ce scénario:

La table principale pour les clients, ceux qui utilisent l'application, est locataire et la key primaire est l' identifiant de la colonne.

J'ai 3 tables pour gérer datatables des locataires et une table spécifique pour gérer une fonctionnalité des posts vacants :

Période , Unity et Shift tous ceux avec PK et FK .

Ma table vacance a 3 foreign keys

  • period_id – Références à la table "Period"
  • unity_id – Références à la table "Unity"
  • shift_id – Références à la table "Shift"

Maintenant le problème:

Je dois garantir que tous ces 3 FK font reference aux lignes des tables Period, Unity et Shift qui appartiennent au même client sur la table des locataires.

J'étais clair dans mon explication?

Peut-être que je peux créer un triggersur pour gérer ces validations. Je ne sais vraiment pas si SGBD a déjà des ressources à faire avec ça.

Pour information: J'utilise SQL Server avec ORM Eloquent. Mais, si vraiment existe une solution pour cela, le meilleur serait celui qui travaille partout.

1) Assurez-vous que votre tenant_id est défini comme NOT NULL sur les tables Period , Unity et Shift .

2) Créez les keys uniques suivantes sur ces tables:

  • Période (locataire_ident, période_id)
  • Unité (locataire, unity_id)
  • Shift (locataire, shift_id)

3) Définir la colonne tenant_id pour l' tenant_id de table comme NOT NULL .

4) Définir les FKs suivants sur la vacancy table:

  • (location_id, period_id) reference Period (locataire_id, period_id)
  • (locataire_id, unity_id) faisant reference à Unity (locataire_id, unity_id)
  • (locataire_id, shift_id) référençant Shift (locataire_ident, shift_id)

De cette façon, vous pouvez garantir que chaque ligne liée a le même tenant_id .