保证多个FK字段属于另一个表

时间:2016-02-25 14:09:37

标签: sql sql-server eloquent foreign-key-relationship

在SaS项目(软件即服务)上,想象一下这种情况:

使用该应用程序的客户的主要表格是租户,主键是 id 列。

我有3个表来管理来自租户的数据,还有一个特定的表来管理空缺的功能:

时段 Unity 转移所有 PK id FK tenant_id

我的表空缺有3个外键

  • period_id - 对“期间”表的引用
  • unity_id - 对“Unity”表的引用
  • shift_id - 引用“Shift”表

现在出现问题:

我需要保证所有这3个FK都引用属于Tenant表上同一Customer的Period,Unity和Shift表中的行。

我的解释清楚了吗?

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

有关信息:我正在使用带有Eloquent ORM的SQL Server。但是,如果确实存在这样的解决方案,那么最好是在任何地方工作的人。

1 个答案:

答案 0 :(得分:4)

1)确保tenant_id NOT NULLPeriodUnity上的Shift被定义为tenant_id

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

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

3)将表vacancy的列NOT NULL定义为vacancy

4)在表tenant_id上定义下面的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)

这样,您可以保证每个链接的行都具有相同的 2/22/2016