保证多个FK字段属于另一个table中的同一行

Guarantee that multiple FK fields belongs to the same row in another table

在 SaS 项目(软件即服务)中,想象一下这个场景:

客户(使用应用程序的客户)的主要 table 是 tenant,它的主键是列 id.

我有 3 个 table 用于管理来自租户的数据,还有一个特定的 table 用于管理 vacancies:

的一项功能

PeriodUnityShift 所有具有 PK id 的FK tenant_id.

我的table空缺有3个外键

现在的问题:

我需要保证所有这 3 个 FK 都引用了 Period、Unity 和 Shift table 上属于租户 table 上同一客户的行。

我解释清楚了吗?

也许我可以创建一个触发器来处理这些验证。我真的不知道 SGBD 是否已经有相关资源。

有关信息:我正在使用 SQL 服务器和 Eloquent ORM。但是,如果真的存在解决方案,最好的办法就是无处不在的解决方案。

1) 确保您的 tenant_id 在 table 的 PeriodUnityShift 上定义为 NOT NULL。 =20=]

2) 在 tables 上创建以下唯一键:

  • 期间(tenant_id, period_id)
  • Unity(tenant_id, unity_id)
  • Shift(tenant_id, shift_id)

3) 将 table vacancy 的列 tenant_id 定义为 NOT NULL.

4) 在 table vacancy 上定义以下 FK:

  • (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.