成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據庫中為什么不推薦使用外鍵約束

數據庫
首先我們明確一點,外鍵約束是一種約束,這個約束的存在,會保證表間數據的關系“始終完整”。因此,外鍵約束的存在,并非全然沒有優點。

 引言

其實這個話題是老生常談,很多人在工作中確實也不會使用外鍵。包括在阿里的JAVA規范中也有下面這一條

【強制】不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。

但是呢,詢問他們原因,大多是這么回答的

每次做DELETE 或者UPDATE都必須考慮外鍵約束,會導致開發的時候很痛苦,測試數據極為不方便。

坦白說,這么說也是對的。但是呢,不夠全面,所以開一文來詳細說明。

正文

首先我們明確一點,外鍵約束是一種約束,這個約束的存在,會保證表間數據的關系“始終完整”。因此,外鍵約束的存在,并非全然沒有優點。

比如使用外鍵,可以

  •  保證數據的完整性和一致性
  •  級聯操作方便
  •  將數據完整性判斷托付給了數據庫完成,減少了程序的代碼量

然而,魚和熊掌不可兼得。外鍵是能夠保證數據的完整性,但是會給系統帶來很多缺陷。正是因為這些缺陷,才導致我們不推薦使用外鍵,具體如下:

性能問題

假設一張表名為user_tb。那么這張表里有兩個外鍵字段,指向兩張表。那么,每次往user_tb表里插入數據,就必須往兩個外鍵對應的表里查詢是否有對應數據。如果交由程序控制,這種查詢過程就可以控制在我們手里,可以省略一些不必要的查詢過程。但是如果由數據庫控制,則是必須要去這兩張表里判斷。

并發問題

在使用外鍵的情況下,每次修改數據都需要去另外一個表檢查數據,需要獲取額外的鎖。若是在高并發大流量事務場景,使用外鍵更容易造成死鎖。

擴展性問題

這里主要是分為兩點

  •  做平臺遷移方便,比如你從Mysql遷移到Oracle,像觸發器、外鍵這種東西,都可以利用框架本身的特性來實現,而不用依賴于數據庫本身的特性,做遷移更加方便。
  •  分庫分表方便,在水平拆分和分庫的情況下,外鍵是無法生效的。將數據間關系的維護,放入應用程序中,為將來的分庫分表省去很多的麻煩。

技術問題

使用外鍵,其實將應用程序應該執行的判斷邏輯轉移到了數據庫上。那么這意味著一點,數據庫的性能開銷變大了,那么這就對DBA的要求就更高了。很多中小型公司由于資金問題,并沒有聘用專業的DBA,因此他們會選擇不用外鍵,降低數據庫的消耗。

相反的,如果該約束邏輯在應用程序中,發現應用服務器性能不夠,可以加機器,做水平擴展。如果是在數據庫服務器上,數據庫服務器會成為性能瓶頸,做水平擴展比較困難。

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2020-06-09 09:19:14

數據庫

2010-01-05 09:24:42

MySQL外鍵約束

2019-11-05 08:20:13

MySQL數據庫外鍵

2023-11-06 13:04:59

Python日志庫

2024-11-29 08:20:22

Autowired場景項目

2010-06-17 17:50:31

SQL Server外

2010-10-09 10:29:29

MySQL外鍵

2024-06-04 00:10:00

開發拷貝

2024-11-12 10:30:54

Docker部署數據庫

2022-05-18 16:55:38

數據分析工具開源

2023-09-08 08:44:09

Oracle數據庫

2011-08-03 17:43:53

MySQL數據庫外鍵約束

2010-05-17 16:10:39

MySQL數據庫

2024-09-12 08:32:42

2025-05-16 02:00:00

HashMapJava代碼

2011-09-01 10:56:34

2021-08-23 13:02:50

MySQLJOIN數據庫

2021-02-18 09:23:47

數據庫分區數據庫倉庫

2022-01-11 10:29:32

Docker文件掛載

2011-05-26 10:30:12

Oracle數據庫約束
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人无遮挡毛片免费看 | 国产日产精品一区二区三区四区 | 99久久日韩精品免费热麻豆美女 | 久久久久国产精品免费免费搜索 | 开操网| 97精品视频在线 | 九九免费观看视频 | 99久久久无码国产精品 | 99久久精品免费看国产四区 | 99热精品久久| 自拍偷拍中文字幕 | 精品欧美一区二区三区久久久 | 欧美日韩精品一区二区 | av电影一区二区 | 999热在线视频 | 欧美成年人 | 亚欧精品| 一区二区三区在线 | 日韩精品在线一区 | 综合久久久 | 中文字幕成人在线 | 特一级毛片 | 国久久 | www.v888av.com | 亚洲成人福利 | 国产精品久久久乱弄 | 国产不卡在线观看 | 亚洲三级av | 国产99久久久久 | 欧洲色综合 | 国产精品一区二区在线 | 天天弄天天操 | 中文亚洲视频 | 国产高清一区二区三区 | 亚洲美女一区 | h视频在线免费观看 | 看片91 | 日韩午夜在线观看 | 亚洲国产成人精品久久 | 成人国产精品一级毛片视频毛片 | 日韩二三区 |