如何对2个表进行检查

时间:2017-10-10 09:25:31

标签: sql-server

我想知道对表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)

1 个答案:

答案 0 :(得分:2)

您可以通过声明一个&#34;超级键&#34;来强制执行此操作。在2016.3610,,,53.83000,53.39000 2016.3881,,,52.60000,53.29000 2016.4153,,,54.28000,54.71000 上,其中包含Table3列和T3ID列(通常,这将是唯一键约束/索引)。

然后,您还会在 ItemIDT3ID上的表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;外键。