2017年10月11日 星期三

關聯性連結與FOREIGN KEY條件約束

關聯性連結與FOREIGN KEY條件約束
資料表間的關聯性連結要如何建立?關聯資料表間的「參考完整性」(Referential Integrity)如何維護?皆需要使用FOREIGN KEY條件約束。

舉例:就關聯性連結而言,客戶資料表Customers與訂單資料表Orders各自擁有一個CustomerID欄位來存放客戶編號(為共同欄位),透過父資料表之共同欄位的主索引鍵(Primary Key)與植基於子資料表之共同欄位的外部索引鍵(Foreign Key)來建立起關聯性連結。

父資料表的主索引鍵係使用PRIMARY KEY條件約束來定義,子資料表的外部索引鍵則是由FOREIGN KEY條件約束來定義。

FOREGIN KEY條件約束最主要的用途在於:「將資料表的某單一欄位或多個欄位的組合定義為外部索引鍵,並決定此外部索引鍵要連結至哪一個資料表的主索引 鍵,以及維護關聯資料表間的參考完整性」。
然父資料表除了透過其主索引鍵與子資料表的外部索引鍵建立起關聯連結外,亦可透過其UNIQUE條件約束的欄位來與子資料表的外部索引鍵建立起關聯性連結。

關於FOREIGN KEY條件約束的其他特性與注意事項:
1.      FOREIGN KEY條件約束能夠將單一欄位或多個欄位的組合定義為外部索引鍵,外部索引鍵之來源欄位的內容當然可以是重複的,而且允許接受Null值。
2.      一個資料表可以擁有多個FOREIGN KEY條件約束。因為一個資料表可能作為多個父資料表的子資料表。
3.      由於是利用鍵值欄中的資料來連結資料表,因此FOREIGN KEY條件約束所指定之欄位的數目與資料型態(包括欄位長度),必須與其連結之PRIMARY KEYUNIQUE條件約束所指定之欄位數目與資料型態(包括欄位長度)完全相同,至於欄位名稱則不一定要相同。
4.      FOREIGN KEY條件約束除了可以連結至同一個資料庫中其他資料表的欄位外,亦可連結至同一資料表的其他欄位。
5.      PRIMARY KEYUNIQUE條件約束不同的是,FOREIGN KEY條件約束並不會自動建立索引。
當查詢(Query)相關聯的資料表以便提取所需的資料記錄時,連結條件幾乎一定是要求父資料表之主索引鍵或UNIQUE條件約束的欄位內容與子資料表之外部索引鍵的內容相符者才被提取出(例如,Customers.CustomerID = Orders.CustomerID),由於索引能夠幫助SQL Server更快速自子資料表中找到相關聯的資料記錄(亦即能提升連結的速度)所以可以替FOREIGN KEY條件約束所定義的外部索引鍵建立索引。
6.      FOREIGN KEY條件約束係使用「限制新增」、「限制更新」與「限制刪除」三種方法來維護關聯資料表間的參考完整性。


沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。