情况是我有一个租户表和一个基于租户的状态查找表。每个都有自己的自动编号主键。
现在我想向租户表添加一列,作为引用查找表的默认状态,租户应该只能默认为该租户中的状态,并且由于某种原因,FK 的确切结构很混乱我的头脑所以我想我会问以防我发疯哈哈。
前表:
租户:
租户ID | 姓名 | 默认状态ID |
---|---|---|
1 | 亚当 | 1 |
2 | 马特 | 7 |
地位:
租户ID | 状态ID | 姓名 |
---|---|---|
1 | 1 | 新的 |
1 | 2 | 关闭 |
1 | 3 | 取消 |
1 | 4 | 完毕 |
2 | 5 | 未来 |
2 | 6 | 已删除 |
2 | 7 | 打开 |
所以我打算添加外键,
CONSTRAINT [FK_Tenant_Status] FOREIGN KEY ([defaultStatusID]) REFERENCES [dbo].[Status] ([statusID])
但我意识到我会喜欢某种方法来强制 defaultStatusID 来自正确租户中的状态,但我不太确定最好的方法是什么?
将tenantID添加到FK似乎是错误的,因为tenantID不是该表的外部并且它会变成循环?除非它实际上那么容易?CONSTRAINT [FK_Tenant_Status] FOREIGN KEY ([tenantID], [defaultStatusID]) REFERENCES [dbo].[Status] ([tenantID],[statusID])
我想也许某种类型的约束是可行的方法,但我不太确定。
感谢您的任何帮助/评论!
当您添加识别目的和行唯一性所需的约束时,您的模型如下所示:
如果您没有首先使用代理来搬起石头砸自己的脚,那么您将通过识别并使用实际键作为主键来开始建模,并得到如下所示的结果:
然后,如果您深思熟虑地决定使用代理,那么您将在保持租户和状态之间的关系类型为识别的同时这样做,并得到如下所示的结果:
那么其他一切就足够简单了。例如,您可以对默认状态和活动状态进行建模,如下所示: