2011-09-21 83 views
0

我一直在更改我所有的表來定義FK,並在嘗試此表studentRsp時出現錯誤。外鍵錯誤

ALTER TABLE StudentRsp 
add CONSTRAINT fk_rspDate 
    FOREIGN KEY (rspDate) 
    REFERENCES LecturerRsp(rspDate); 

正在錯誤

錯誤消息:有在 引用表「LecturerRsp」外鍵「fk_rspDate」的引用列的列表 匹配沒有主或候選鍵。無法創建約束。請參閱 以前的錯誤。

的rspDate在LecturerRsp定義爲一個主鍵

+0

你說rspDate被定義爲「主鍵」,這不太合理,因爲每個表最多隻有一個主鍵。我認爲你的意思是說它被定義爲主鍵的一部分,正確地解決問題的核心。 –

+0

我在我的表上有多個主鍵 – David

+0

如果你的主鍵由多個列組成,任何外鍵都必須引用**所有** PK中的那些列 - 不只是其中的一個 –

回答

0

尋找在你StudentRsp有不你LecturerRsp表存在的字段行。換句話說,約束要求在foriegn鍵列中的所有字段的一個字段中的主鍵列匹配,並且有在StudentRsp的密鑰中不LecturerRsp

實施例存在:

LecturerRsp   StudentRsp 
pk_Col1    fk_Col1 
    1      1 
    2      2 
    3      4 
    4      5 *** 
0

錯誤消息是實際上可以很清楚的 - 只是讀它...

*有在引用表上沒有主或候選鍵 「LecturerRsp」的引用列的列表中外資 鍵匹配「fk_rspDate '。*

要引用你的表LecturerRsp和其列rspDate - 但此消息明確地告訴你:rspDate是不是該表的主鍵,也不是唯一索引/約束的一部分。

這兩者中的任何一個都是您能夠從外鍵引用該列的要求。

要解決這個問題:

  • 要麼改變LecturerRsp主鍵是在列rspDate
  • 或者(如果可能的話),該列

創建唯一索引。如果你不能做這兩件事中的任何一件,那麼你不能從外鍵引用那一列。