首頁  >  文章  >  資料庫  >  資料庫表與表之間怎麼建立聯繫

資料庫表與表之間怎麼建立聯繫

青灯夜游
青灯夜游原創
2021-01-28 11:44:3933965瀏覽

資料庫表與表之間透過主外鍵來建立聯繫。如果為表指定了主鍵約束, 資料庫引擎將透過為主鍵列自動建立唯一索引來強制資料的唯一性;而外鍵是用於在兩個表中的資料之間建立和加強連結的一列或多列的組合,可控制可在外鍵表中儲存的資料。

資料庫表與表之間怎麼建立聯繫

本教學操作環境:windows7系統、mysql5.8版、Dell G3電腦。

資料庫表與表之間透過主外鍵來建立聯繫。

(推薦教學:mysql影片教學

主鍵約束

表通常具有包含唯一識別表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (PK),用於強製表的實體完整性。由於主鍵約束可保證資料的唯一性,因此經常對識別列定義這種約束。

如果為表指定了主鍵約束, 資料庫引擎 將透過為主鍵列自動建立唯一索引來強制資料的唯一性。當在查詢中使用主鍵時,此索引還允許對資料進行快速存取。如果對多列定義了主鍵約束,則一列中的值可能會重複,但來自主鍵約束定義中所有列的值的任何組合必須唯一。

如下圖所示, Purchasing.ProductVendor 表中的 ProductID 和 VendorID 欄位構成了針對此表的複合主鍵約束。這確保了 ProductVendor 表中的每個行都具有 ProductID 和 VendorID 的一個唯一組合。這樣可以防止插入重複的行。

資料庫表與表之間怎麼建立聯繫

  • 一個表格只能包含一個主鍵約束。

  • 主鍵不能超過 16 列且總金鑰長度不能超過 900 個位元組。

  • 由主鍵約束產生的索引不會使表中的索引數超過 999 個非聚集索引和 1 個聚集索引。

  • 如果沒有為主鍵約束指定聚集或非聚集索引,且資料表中沒有聚集索引,則使用聚集索引。

  • 在主鍵約束中定義的所有欄位都必須定義為不為 Null。如果沒有指定為 Null 性,則參與主鍵約束的所有欄位的為 Null 性都會設為不為 Null。

  • 如果在 CLR 使用者定義類型的列中定義主鍵,則該類型的實作必須支援二進位排序。

外鍵約束

外部鍵(FK) 是用於在兩個表中的資料之間建立和加強連結的一列或多列的組合,可控制可在外鍵表中儲存的資料。在外鍵引用中,當包含一個表的主鍵值的一個或多個列被另一個表中的一個或多個列引用時,就在這兩個表之間建立了連結。這個列就成為第二個表的外鍵。

例如,因為銷售訂單和銷售人員之間存在著一種邏輯關係,所以 Sales.SalesOrderHeader 表格包含一個指向 Sales.SalesPerson 表的外鍵連結。 SalesOrderHeader 表中的 SalesPersonID 欄位與 SalesPerson 表中的主鍵列相對應。 SalesOrderHeader 表中的 SalesPersonID 欄位是指向 SalesPerson 表的外鍵。透過建立此外鍵關係,如果 SalesPerson 表的主鍵中不存在 SalesPersonID 的值,則 SalesPersonID 的值將無法插入到 SalesOrderHeader 表。

表最多可以將 253 個其他表和列作為外鍵引用(傳出引用)。 SQL Server 2016 (13.x) 將可在單獨的表中引用的其他表和列(傳入引用)的數量限制從 253 提高至 10,000。 (相容性等級至少必須為 130。)數量限制的提高帶來了下列約束:

  • 只有 DELETE DML 操作才支援超過 253 個外鍵引用。不支援 UPDATE 和 MERGE 操作。

  • 對自身進行外鍵引用的表仍只能進行 253 個外鍵引用。

  • 列儲存索引、記憶體最佳化表、Stretch Database 或已分區外鍵表暫不支援進行超過 253 個外鍵引用。

外鍵約束的索引

與主鍵約束不同,建立外鍵約束不會自動建立對應的索引。但是由於以下原因,對外鍵手動建立索引通常是有用的:

  • 當在查詢中組合相關表中的資料時,經常在聯接條件中使用外鍵列,方法是將一個表的外鍵約束中的一列或多列與另一個表中的主鍵列或唯一鍵列相符。索引使 資料庫引擎 可以在外鍵表中快速找到相關資料。但是,建立此索引並不是必需的。即使沒有對兩個相關表定義主鍵或外鍵約束,也可以對來自這兩個表中的資料進行組合,但兩個表間的外鍵關係說明已用其鍵作為條件對其進行了優化,以便組合到查詢中。

  • 對主鍵約束的變更可由相關表中的外鍵約束檢查。

更多程式相關知識,請造訪:程式設計影片! !

以上是資料庫表與表之間怎麼建立聯繫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn