2012-10-15 60 views
1

我有一個引用外鍵到其主表的表。但我想添加另一個表的引用。創建與非主列的關係

舉例來說,假設我有三個表:Child, Parent, Transaction

父表:

  • PARENTID

子表:

  • childID的
  • PARENTID

事務表:

  • 的TransactionID
  • PARENTID(引用ParentID on Parent表,可空
  • childID的(參考文獻ChildID on Child表,可空

我想一個cascade on update添加引用ParentID on Child表。因此,當親子關係發生變化時,我的ParentIDTransaction表上將自動更新。

+0

問題是什麼?你在哪裏遇到問題? –

+0

我想添加這樣的外鍵:'ALTER TABLE [Transaction] WITH CHECK ADD CONSTRAINT [FK_Name] FOREIGN KEY([ParentID]) REFERENCES [Child]([ParentID])CASCADE ON UPDATE' – Fer

+0

爲什麼你需要事務表中的ParentID?您可以在Child Table中找到帶有ChildID的parentID。 – Wim

回答

3

顯然,ParentID不是Child表的主鍵。

此列在整個表中是唯一的嗎?

  • 如果是的話:你可以ParentIDChild表定義唯一索引,然後FK參考添加到唯一索引

  • 如果NO:如果ParentIDChild獨特的,那麼你不能創建一個FK的參考。 FK引用的「目標」必須是該表的主鍵,或者該表的至少一個唯一列。否則,如果你有ParentID = 42而且值是而不是是唯一的,那麼您所指的是哪一行?!?!?

Simply, I want the same value pair on my ParentID&ChildID columns on Transaction table as ParentID&ChildID columns on Child table

在這種情況下,你需要一個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 
+0

ParentID不是子表上的主鍵,但它是父表的外鍵。簡單地說,我需要在Transaction表**上的** ParentID&ChildID列上的相同值對作爲** ChildTable上的** ParentID&ChildID列**我如何執行此操作? – Fer

+0

@Fer:查看我的更新回覆 –

+0

我收到以下錯誤:**引用表'dbo.Child'中沒有與外鍵'FK_Transaction_Child'中的引用列表匹配的主鍵或候選鍵。** – Fer