我有一个表引用其主表的外键。但我想在另一个表中添加另一个引用。
例如,假设我有三个表:Child, Parent, Transaction
父表:
子表:
交易表:
ParentID on Parent
表, 可以为空 )ChildID on Child
表, 可以为空 )我想在cascade on update
表中添加 ParentID on Child
引用。因此,当亲子关系发生变化时,ParentID
表上的Transaction
将自动更新。
答案 0 :(得分:3)
显然,ParentID
不是Child
表的主键。
此列在整个表中是唯一的吗?
如果是:您可以在ParentID
表的Child
上定义唯一索引,然后将FK引用添加到该唯一索引
如果否:如果ParentID
上的Child
不唯一,那么您无法创建一个FK引用它。 FK引用的“目标”必须是该表的主键,或者至少是该表上的唯一列。否则,如果您有ParentID = 42
并且值不唯一,那么您指的是哪一行?!?!?
简单地说,我想在Transaction表上的ParentID& ChildID列上使用相同的值对作为Child表上的ParentID& ChildID列
在这种情况下,您需要在两列上建立FK关系 - 创建如下:
CREATE UNIQUE INDEX UX_ParentChild
ON dbo.Child(ParentID, ChildID)
ALTER TABLE dbo.Transaction
ADD CONSTRAINT FK_Transaction_Child
FOREIGN KEY(ParentID, ChildID) REFERENCES dbo.Child(ParentID, ChildID)
ON UPDATE CASCADE