保证多个FK字段属于另一个table中的同一行
Guarantee that multiple FK fields belongs to the same row in another table
在 SaS 项目(软件即服务)中,想象一下这个场景:
客户(使用应用程序的客户)的主要 table 是 tenant,它的主键是列 id.
我有 3 个 table 用于管理来自租户的数据,还有一个特定的 table 用于管理 vacancies:
的一项功能
Period、Unity 和 Shift 所有具有 PK id 的 和 FK tenant_id.
我的table空缺有3个外键
- period_id - 对 "Period" table
的引用
- unity_id - 对 "Unity" table
的引用
- shift_id - 对 "Shift" table
的引用
现在的问题:
我需要保证所有这 3 个 FK 都引用了 Period、Unity 和 Shift table 上属于租户 table 上同一客户的行。
我解释清楚了吗?
也许我可以创建一个触发器来处理这些验证。我真的不知道 SGBD 是否已经有相关资源。
有关信息:我正在使用 SQL 服务器和 Eloquent ORM。但是,如果真的存在解决方案,最好的办法就是无处不在的解决方案。
1) 确保您的 tenant_id
在 table 的 Period
、Unity
和 Shift
上定义为 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
.
在 SaS 项目(软件即服务)中,想象一下这个场景:
客户(使用应用程序的客户)的主要 table 是 tenant,它的主键是列 id.
我有 3 个 table 用于管理来自租户的数据,还有一个特定的 table 用于管理 vacancies:
的一项功能Period、Unity 和 Shift 所有具有 PK id 的 和 FK tenant_id.
我的table空缺有3个外键
- period_id - 对 "Period" table 的引用
- unity_id - 对 "Unity" table 的引用
- shift_id - 对 "Shift" table 的引用
现在的问题:
我需要保证所有这 3 个 FK 都引用了 Period、Unity 和 Shift table 上属于租户 table 上同一客户的行。
我解释清楚了吗?
也许我可以创建一个触发器来处理这些验证。我真的不知道 SGBD 是否已经有相关资源。
有关信息:我正在使用 SQL 服务器和 Eloquent ORM。但是,如果真的存在解决方案,最好的办法就是无处不在的解决方案。
1) 确保您的 tenant_id
在 table 的 Period
、Unity
和 Shift
上定义为 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
.