创建与非主列的关系

时间:2012-10-15 11:58:57

标签: sql-server foreign-keys

我有一个表引用其主表的外键。但我想在另一个表中添加另一个引用。

例如,假设我有三个表:Child, Parent, Transaction

父表:

  • PARENTID

子表:

  • childID的
  • PARENTID

交易表:

  • 的TransactionID
  • ParentID(引用ParentID on Parent表, 可以为空
  • ChildID(引用ChildID on Child表, 可以为空

我想在cascade on update表中添加 ParentID on Child 引用。因此,当亲子关系发生变化时,ParentID表上的Transaction将自动更新。

1 个答案:

答案 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