為什麼大家很少使用外來鍵了?

KunlunDB發表於2022-01-21
背景


目前很多公司都不考慮加入外來鍵了,很多人工作中也不怎麼使用外來鍵了,畢竟每次做DELETE 或者UPDATE都必須考慮外來鍵約束,會導致開發的時候很痛苦,測試資料極為不方便。

在筆者看來,在相應的場景下,如果使用的一個功能弊大於利,可能就不會選擇了。所以是否使用外來鍵取決相應的場景,也不可去完全拋棄外來鍵。

為什麼會很少使用外來鍵呢?

目前使用外來鍵確實存在一些不便,這也是大多數人不使用的原因所在。我具體總結了會存在這麼幾個原因:

1、 增加資料庫壓力

外來鍵等於把資料的一致性事務實現,全部交給資料庫伺服器完成,並且有了外來鍵,當做一些涉及外來鍵欄位的增、刪、更新操作之後,需要觸發相關操作去檢查,而不得不消耗資源。

2、 死鎖問題

若是高併發大流量事務場景,使用外來鍵還可能容易造成死鎖。

3、 開發不方便

有外來鍵時,無論開發還是維護,需要手工維護資料時,都不太方便,要考慮級聯因素。

4、 資料刷庫

實際開發過程中,免不了要經常刷庫,匯入或刪除資料,外來鍵的存在會讓表刪除或插入失敗(表資料變更有順序要求)。

5、 外來鍵維護

隨著專案的迭代,表之間的關係也會發生變化,比如有個外來鍵需要刪除;或是要新增一個外來鍵,但由於現有資料不準,導致外來鍵加不上去,久而久之,ER圖也不能完整的顯示錶關係,這ER圖看還是不看?

外來鍵真的就沒有用了嗎?

存在即合理,每一個產品,每一個功能既然存在,在某些地方也是存在優勢的。筆者總結了一下外來鍵的幾個優勢點:

1、 資料庫的一致性

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

2、 ER圖可靠性

有主外來鍵的資料庫設計可以增加ER圖的可讀性(也有特別的公司產品特別注重的這一方面)。

總結

1、 如是單機且低併發,也不需要效能調優,再或者不能用程式保證資料的一致性,完整性,可以使用外來鍵,如學校的,保證資料的一致性與完整,基數也不大。

2、 如果為了高併發,分散式,使系統效能更優,以及更好維護,則不要去使用外來鍵。

END


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011764/viewspace-2853165/,如需轉載,請註明出處,否則將追究法律責任。

相關文章