溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫表與表之間如何建立聯(lián)系

發(fā)布時間:2021-01-28 14:11:36 來源:億速云 閱讀:1558 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹了數(shù)據(jù)庫表與表之間如何建立聯(lián)系,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

數(shù)據(jù)庫表與表之間通過主外鍵來建立聯(lián)系。如果為表指定了主鍵約束, 數(shù)據(jù)庫引擎將通過為主鍵列自動創(chuàng)建唯一索引來強(qiáng)制數(shù)據(jù)的唯一性;而外鍵是用于在兩個表中的數(shù)據(jù)之間建立和加強(qiáng)鏈接的一列或多列的組合,可控制可在外鍵表中存儲的數(shù)據(jù)。

數(shù)據(jù)庫表與表之間通過主外鍵來建立聯(lián)系。

(推薦教程:mysql視頻教程)

主鍵約束

表通常具有包含唯一標(biāo)識表中每一行的值的一列或一組列。 這樣的一列或多列稱為表的主鍵 (PK),用于強(qiáng)制表的實(shí)體完整性。 由于主鍵約束可保證數(shù)據(jù)的唯一性,因此經(jīng)常對標(biāo)識列定義這種約束。

如果為表指定了主鍵約束, 數(shù)據(jù)庫引擎 將通過為主鍵列自動創(chuàng)建唯一索引來強(qiáng)制數(shù)據(jù)的唯一性。 當(dāng)在查詢中使用主鍵時,此索引還允許對數(shù)據(jù)進(jìn)行快速訪問。 如果對多列定義了主鍵約束,則一列中的值可能會重復(fù),但來自主鍵約束定義中所有列的值的任何組合必須唯一。

如下圖所示, Purchasing.ProductVendor 表中的 ProductID 和 VendorID 列構(gòu)成了針對此表的復(fù)合主鍵約束。 這確保了 ProductVendor 表中的每個行都具有 ProductID 和 VendorID 的一個唯一組合。 這樣可以防止插入重復(fù)的行。

數(shù)據(jù)庫表與表之間如何建立聯(lián)系

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

  • 主鍵不能超過 16 列且總密鑰長度不能超過 900 個字節(jié)。

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

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

  • 在主鍵約束中定義的所有列都必須定義為不為 Null。 如果沒有指定為 Null 性,則參與主鍵約束的所有列的為 Null 性都將設(shè)置為不為 Null。

  • 如果在 CLR 用戶定義類型的列中定義主鍵,則該類型的實(shí)現(xiàn)必須支持二進(jìn)制排序。

外鍵約束

外鍵 (FK) 是用于在兩個表中的數(shù)據(jù)之間建立和加強(qiáng)鏈接的一列或多列的組合,可控制可在外鍵表中存儲的數(shù)據(jù)。 在外鍵引用中,當(dāng)包含一個表的主鍵值的一個或多個列被另一個表中的一個或多個列引用時,就在這兩個表之間創(chuàng)建了鏈接。 這個列就成為第二個表的外鍵。

例如,因?yàn)殇N售訂單和銷售人員之間存在一種邏輯關(guān)系,所以 Sales.SalesOrderHeader 表含有一個指向 Sales.SalesPerson 表的外鍵鏈接。 SalesOrderHeader 表中的 SalesPersonID 列與 SalesPerson 表中的主鍵列相對應(yīng)。 SalesOrderHeader 表中的 SalesPersonID 列是指向 SalesPerson 表的外鍵。 通過創(chuàng)建此外鍵關(guān)系,如果 SalesPerson 表的主鍵中不存在 SalesPersonID 的值,則 SalesPersonID 的值將無法插入到 SalesOrderHeader 表。

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

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

  • 對自身進(jìn)行外鍵引用的表仍只能進(jìn)行 253 個外鍵引用。

  • 列存儲索引、內(nèi)存優(yōu)化表、Stretch Database 或已分區(qū)外鍵表暫不支持進(jìn)行超過 253 個外鍵引用。

外鍵約束的索引

與主鍵約束不同,創(chuàng)建外鍵約束不會自動創(chuàng)建對應(yīng)的索引。 但是由于以下原因,對外鍵手動創(chuàng)建索引通常是有用的:

  • 當(dāng)在查詢中組合相關(guān)表中的數(shù)據(jù)時,經(jīng)常在聯(lián)接條件中使用外鍵列,方法是將一個表的外鍵約束中的一列或多列與另一個表中的主鍵列或唯一鍵列匹配。 索引使 數(shù)據(jù)庫引擎 可以在外鍵表中快速查找相關(guān)數(shù)據(jù)。 但是,創(chuàng)建此索引并不是必需的。 即使沒有對兩個相關(guān)表定義主鍵或外鍵約束,也可以對來自這兩個表中的數(shù)據(jù)進(jìn)行組合,但兩個表間的外鍵關(guān)系說明已用其鍵作為條件對其進(jìn)行了優(yōu)化,以便組合到查詢中。

  • 對主鍵約束的更改可由相關(guān)表中的外鍵約束檢查。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“數(shù)據(jù)庫表與表之間如何建立聯(lián)系”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI