Mysql 外來鍵利弊

2021-09-27 09:12:14 字數 1117 閱讀 2812

資料庫設計是否需要外來鍵。

這裡有兩個問題:乙個是如何保證資料庫資料的完整性和一致性;二是效能的影響。

正方觀點:

由資料庫自身保證資料一致性,完整性,更可靠,因為程式很難100%保證資料的完整性,而用外來鍵即使在資料庫伺服器當機或者出現其他問題的時候,也能夠最大限度的保證資料的一致性和完整性。

eg: 資料庫和應用是一對多的關係,a 應用會維護他那部分資料的完整性,系統一變大時,增加了 b 應用,a 和 b 兩個應用也許是不同的開發團隊來做的。他們如何協調保證資料的完整性,而且一年以後如果又增加了 c 應用呢?

有主外來鍵的資料庫設計可以增加er圖的可讀性,這點在資料庫設計時非常重要。

外來鍵在一定程度上說明的業務邏輯,會使設計周到具體全面。

反方觀點:

可以用觸發器或應用程式保證資料的完整性

過分強調或者說使用主鍵/外來鍵會平添開發難度,導致表過多等問題

不用外來鍵時資料管理簡單,操作方便,效能高(匯入匯出等操作,在insert, update, delete 資料的時候更快)

eg: 在海量的資料庫中想都不要去想外來鍵,試想,乙個程式每天要 insert 數百萬條記錄,當存在外來鍵約束的時候,每次要去掃瞄此記錄是否合格,一般還不止乙個欄位有外來鍵,這樣掃瞄的數量是成級數的增長!我的乙個程式入庫在 3 個小時做完,如果加上外來鍵,需要 28 個小時!

結論:

在大型系統中(效能要求不高,安全要求高),使用外來鍵;在大型系統中(效能要求高,安全自己控制),不用外來鍵;小系統隨便,最好用外來鍵。

用外來鍵要適當,不能過分追求

不用外來鍵而用程式控制資料一致性和完整性時,應該寫一層來保證,然後個個應用通過這個層來訪問資料庫。

為何說外來鍵有效能問題:

1.資料庫需要維護外來鍵的內部管理;

2.外來鍵等於把資料的一致性事務實現,全部交給資料庫伺服器完成;

3.有了外來鍵,當做一些涉及外來鍵字段的增,刪,更新操作之後,需要觸發相關操作去檢查,而不得不消耗資源;

4.外來鍵還會因為需要請求對其他表內部加鎖而容易出現死鎖情況;

mysql 外來鍵 del 記錄 MySQL 外來鍵

在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...

mysql外來鍵和外來鍵約束

1.mysql中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引 2.如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主...

mysql 外來鍵和外來鍵約束

1.外來鍵 如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。就是a表的主鍵,被用到了b表中,此時它就成了外來鍵 2.外來鍵約束 如果想要插入或者更新外來鍵的值,資料庫會和引用表中字段的資料進行驗證,如果插入或更改的值不在被引用的表中,則插入失敗 外來鍵的作用就是保證...