2012-04-05 99 views
0

我在創建數據庫中的外鍵時遇到了一些麻煩。以下是對我的表看起來像一個轉述模型:創建新外鍵(SQL Server)

注意

* (PK) NOTE_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DATE  DATETIME 
*  SERIES_ID BIGINT 

系列

* (PK) SERIES_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DESCR  VARCHAR(1000) 

我想創建一個「具有」 NOTE之間的關係, SERIESSERIES_ID。我認爲,通過SERIES_ID建立兩個表之間的外鍵將是解決辦法,但是當我嘗試創建它,我得到以下錯誤:

ERROR: There are no primary or candidate keys in the referenced table 'dbo.SERIES' that match the referencing column list in the foreign key 'FK_SERIES_NOTE'. Could not create constraint

我用自帶的網絡數據庫管理器我設置的GoDaddy SQL Server,所以我不確定它試圖使用的底層查詢或我將它發佈。

在一天結束時,這是所有創建一個關係,以便我的Note對象的NHibernate映射將包含與Series對象的一對一關係。不過,我甚至可能沒有試圖用外鍵來解決這個問題。

我正在以正確的方式去解決這個問題嗎?

編輯: 在試圖將表格配對到一個更簡單的例子,我刪除了我認爲是幾個非關鍵列。但是,我最終留下了一個實際上是系列表上覆合主鍵的一部分的字段。所以,因爲我試圖將外鍵只分配給組合鍵的一部分,所以不允許我這樣做。

最後,我再次審視了我的表的結構,發現我實際上並不需要組合鍵的另一部分 - 並且在刪除之後,現在外鍵的分配很好。

+0

沒有**正在生成實際的T-SQL語句**,這真的很難說出任何東西....最有可能的是,網站管理員做錯了什麼 - 或者你選錯了專欄或什麼..... – 2012-04-05 11:16:06

+1

@Tyler,從NHibernate的角度和數據庫的角度來看,這不是一對一的關係。這是多對一的關係。如果兩個主鍵都是'NOTE_ID',那麼這將是一對一的關係。 – 2012-04-05 11:43:54

+3

您已將'SERIES_ID'標記爲'SERIES'中的主鍵,但是您是否檢查過這是實際的?很多人混淆了主鍵和標識列 - 它們是兩個單獨的概念。如果可能,您使用的管理器應用程序是否可以爲現有對象生成腳本?如果是這樣,添加實際的表格定義而不是僞定義將是有用的。 – 2012-04-05 12:56:54

回答

0

如果可以的話,你可能會嘗試在查詢分析器運行下面的語句,看看所產生的錯誤信息(我猜@Damien_The_Unbeliever是正確的):

ALTER TABLE NOTE ADD CONSTRAINT FK_SERIES_NOTE 
FOREIGN KEY (SERIES_ID) REFERENCES SERIES(SERIES_ID) 
--ON DELETE CASCADE 
-- uncomment the preceding line if you want a delete on a serie 
-- to automatically delete all notes on this serie 

希望這將有助於