我想知道对表2的ItemId执行检查的最佳方法是什么。检查的重点是强制表3链接到的表3中的行具有相同的ItemId就像在例子中一样。
编辑:在评论之后,我意识到我可能需要添加更多细节,因为当前状态有点过于笼统。
Table2是一个链接表,其中Table4和ItemTable结合在一起,这个表也链接到Table3,但这是可以为空的。表2中的PK是T4ID和ItemId的组合。
关系:
TableTable到Table2是一个(ItemTable)到很多(表2)。
TableTable到Table3是一个(ItemTable)到很多(表3)。
表2至表3是一个(表3)至多个(表2)。
表2至表4是一个(表4)至多个(表2)
ItemTable Table2 Table3 Table4
ItemId(PK) T4ID(PK FK) T3ID(PK) T4ID(PK)
ItemId(PK FK) <- should match -> ItemId(FK)
T3ID(FK)
答案 0 :(得分:2)
您可以通过声明一个&#34;超级键&#34;来强制执行此操作。在2016.3610,,,53.83000,53.39000
2016.3881,,,52.60000,53.29000
2016.4153,,,54.28000,54.71000
上,其中包含Table3
列和T3ID
列(通常,这将是唯一键约束/索引)。
然后,您还会在 ItemID
和T3ID
上的表2和3之间声明额外的 1 FK。
即。保留所有现有约束。然后运行:
ItemID
1 从技术上讲,这会使基于ALTER TABLE Table3 ADD CONSTRAINT UQ_Table3_Items UNIQUE (T3ID, ItemId);
ALTER TABLE Table2 ADD CONSTRAINT FK_Table2_ItemXRef
FOREIGN KEY (T3ID, ItemId) references Table3 (T3ID, ItemID);
的普通FK变得多余,但我通常更愿意让它存在以表示&#34;真实&#34;外键。