本文將介紹建立外部索引鍵關聯性的一些注意事項。
【情境描述】
假設您有兩個資料表,其主索引鍵(Primary Key)都是由複合鍵值所組成(如下圖),若您嘗試於 detail 資料表建立外部索引鍵(Foreign Key)關聯到 master 資料表。
若您使用 SSMS 建立關聯,您可能遇到如下圖的錯誤訊息:
您也可以嘗試使用 T-SQL 的 ALTER TABLE 敘述來建立關聯。
ALTER TABLE detail ADD CONSTRAINT FK_detail_master FOREIGN KEY (CaseNo,ConferenceDate,ItemType,ConferenceType) REFERENCES dbo.master(CaseNo,ConferenceDate,ItemType,ConferenceType)
此時會看到類似下圖的錯誤訊息。
【發生問題原因】
根據英文版的錯誤訊息,比較容易得知問題出在哪,會發生這個問題的原因可能在於參考欄位的順序與 master 資料表的順序不一致所造成。
【可能的解決方法】
因此我們先來查看 master 資料表主索引鍵的定義,由下圖可知,主索引鍵是由【CaseNo、ConferenceDate、ConferenceType 及 ItemType】所組成。
因此在建立關聯時,若您未依照 master 資料表的主索引鍵的順序建立外部索引鍵,就可能遇到上面所遇到的錯誤訊息。重新利用 SSMS 來建立 detail 資料表與 master 資料表的外部索引,於 detail 資料表的設計畫面中,點選工具列中的【關聯性】按鈕。
這一次我們依照 master 資料表主索引鍵的順序來與 detail 資料表進行關聯(如下圖),設定完畢後按確定。
您會看到外部索引鍵已經被建立。
同樣的上述步驟您一樣可以用 T-SQL 來完成,例如下列的指令碼:
ALTER TABLE detail ADD CONSTRAINT FK_detail_master FOREIGN KEY (CaseNo,ConferenceDate,ConferenceType,ItemType) REFERENCES dbo.master(CaseNo,ConferenceDate,ConferenceType,ItemType)
不管您使用 GUI 還是 T-SQL 來建立關聯,我們都可以在資料庫圖表中看到關聯已經被順利建立(如下圖)。
【備註】
這是一個看起來很簡單但實際上卻可能沒注意就造成您無法順利建立外部索引鍵,希望這篇短文對遇到類似問題的您有幫助。
【參考資料】