【前言】最近做專案的時候,一直有乙個疑惑為什麼現在做專案建表的時候,大家都不使用外來鍵,而是在應用層使用**邏輯解決多表之間的關聯關係。
【複習】主鍵、外來鍵
定義主鍵和外來鍵主要是為了維護關聯式資料庫的完整性,總結一下:補充:1.主鍵是能確定一條記錄的唯一標識。比如,一條記錄包括身份證號,姓名,家庭住址等。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。
2.外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持資料的一致性。比如,a表中的某欄位,是b表的主鍵,那他就可以是a表的外來鍵。
【解答】為什麼不建議使用外來鍵
上圖是阿里的開發手冊中關於外來鍵使用的規定。個人理解:
開發過程中,無論是修改還是新增刪除的時候,外來鍵的存在會給我們帶來一些不方便的地方,測試資料的過程中也會很麻煩。但是外來鍵的優點也不容忽視,它可以保證資料的完整性。將資料完整性判斷託付給了資料庫完成,可以減少程式的**量。但是相比它的優點,它帶來的弊端也是使我們放棄使用外來鍵的主要因素:
修改、刪除、新增資料的過程中需要考慮一些問題,不方便測試。
若是在高併發大流量事務場景,使用外來鍵更容易造成死鎖。
使用外來鍵等於將應用程式應該執行的判斷邏輯轉移到了資料庫上。資料庫的效能開銷變大了,增加了資料庫的消耗。
MySQL 外來鍵及外來鍵的使用
如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外來鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。表間關係有一對一,一對多和多對多。首先我們舉個簡單的栗子 學生表,老師表...
外來鍵的使用
外來鍵主要用到的語句是 foreign key sid references to stu info id on delete cascade 示例 表1,stu info表示學生資訊 表2,stu grades表示學生的考試成績。當學生畢業之後,相關學生資訊從stu info刪除之後,stu gr...
mysql外來鍵的使用
像mysql這樣的關係型資料庫管理系統,它們的基礎是在資料庫的表之間建立關係的能力。通過方便地在不同表中建立記錄到記錄的聯絡,rdbms可以利用不同的方法分析資料,同時保持資料庫以系統的方式 最小的冗餘進行組織。簡單描述 這些關係基本上依靠外來鍵進行管理,在關係中所有表中具有相同含義的字段作為公共部...