本文參考
外來鍵是什麼
如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外來鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。
比如有學生表(學號,姓名,性別,班級編號)和班級表(班級編號,班級名字),班級對應學生是一對多的關係,學生對應班級是多以一的關係。這種關係中,班級編號是兩張表的公共關鍵字,又是班級表的主鍵,學生表的外來鍵,所以呢,班級表是主表,學生表是從表
外來鍵的作用:資料庫通過外來鍵來保證資料的完整性一致性
在使用者進行insert,update,delete等操作時,資料庫會先通過外來鍵檢測(做關係檢查),才會允許操作。具體的!!!外來鍵檢測規則!!!如下:
舉個例子:存在學生表(學號,姓名,性別,班級編號)和班級表(班級編號,班級名字),學生表引用了班級表的班級編號作為外來鍵。在不設定外來鍵的情況下。學生表的班級編號欄位和班級表的班級編號欄位是沒有關聯的。僅僅是你自己覺得他們有關係而已。資料庫並不覺得它倆有關係。也就是說,你在學生表的班級編號欄位插了乙個值(比方20140999999),可是這個值在班級表中並沒有,這個時候,資料庫還是允許你插入的,它並不會對插入的資料做關係檢查。然而在設定外來鍵的情況下。你插入學生表班級編號欄位的值必需要求在班級表的班級編號欄位能找到。 同時。假設你要刪除班級表的某個班級編號字段。必須保證學生表中沒有引用該字段值的列,否則就沒法刪除。這就是所謂的保持資料的一致性和完整性。從表的字段必須與外來鍵型別同樣,這也保證了資料的一致性。
建外鍵幾個原則
為關聯字段建立外來鍵。
所有的鍵都必須唯一。
避免使用復合鍵。
外來鍵總是關聯唯一的鍵字段。
外來鍵的優點--保證資料的完整性一致性
業務邏輯清楚明了:外來鍵在一定程度上可以說明業務邏輯
er可讀性:有主外來鍵的資料庫設計可以增加er圖的可讀性,這點在資料庫設計時非常重要。
保證資料完整性一致性:外來鍵是資料庫級的乙個完整性約束,通過建立外來鍵,由資料庫自身保證資料一致性,完整性,更可靠。
安全:使用應用程式來維護資料完整性是嚴重降低資料庫安全性的一種做法。???
避免資料冗餘:不適用外來鍵,會導致資料冗餘,在級聯最底層的表可能會重複好幾層的資料。會導致最底層的表資料量翻倍,io瓶頸是資料庫效能瓶頸之一。
使用外來鍵可以保證資料的完整性和一致性
外來鍵的缺點--對海量資料,效能低
降低效能:不用外來鍵時,資料!!!管理簡單,操作方便,效能高,在insert,update,delete資料的時候更快!!!。在海量資料庫中不要用外來鍵。比如乙個程式每天要insert數百萬條記錄,當存在外來鍵約束時,每次insert都要掃瞄此記錄是不是合適,有沒有違反外來鍵約束,有的時候還不止乙個外來鍵,這樣的掃瞄是成級數增長的。沒有外來鍵,3小時完成的入庫,在有外來鍵約束的情況下,要28小時。
增加開發維護難度:除了效能方便的問題,開發測試部署實施以及維護的時候都會帶來不少問題。
可被替代:可以用觸發器或應用程式保證資料的完整性
總之,外來鍵可以維護資料庫完整性,但是資料完整性幾乎都是業務的要求,理應由業務部分負責維護,而不是依賴資料庫。訪問量較大的web應用,以及有一定規模的企業應用,都關注伸縮性和效能問題,各種形式的垂直、水平切分運用越來越多,外來鍵、觸發器、儲存過程之類的基本屬禁區。
總之:使用外來鍵效能低,開發維護難!
要不要使用外來鍵
資料庫設計是否需要外來鍵,這裡有兩個問題:乙個是如何保證資料庫資料的完整性和一致性;二是第一條對效能的影響。
在大型系統中(效能要求不高,安全要求高),使用外來鍵;在大型系統中(效能要求高,安全自己控制),不用外來鍵;小系統隨便,最好用外來鍵。
用外來鍵要適當,不能過分追求
不用外來鍵而用程式控制資料一致性和完整性時,應該寫一層來保證,然後個個應用通過這個層來訪問資料庫。
邏輯外來鍵
鑑於以上(物理)外來鍵的優點和缺點,我們既想保證資料的完整性一致性,又想提高應用程式的效能,降低開發維護難度,就可以選擇不用物理外來鍵,使用邏輯外來鍵由程式控制資料完整性。
使得業務邏輯清楚命令
保證資料完整一致性:全由業務應用程式控制資料完整性
提高了效能
降低了開發維護難度
MySQL資料庫 外來鍵 foreign key
1.多表關聯表之間的關係 一對多 多對多 一對一 什麼時候要分表?資料重複 結構混亂 擴充套件維護性差 2.外來鍵 約束create table 表名 欄位名 型別 長度 foreign key 外來鍵的欄位名稱 refernces 對方表名 對方主鍵名 create table teacher i...
外來鍵(Foreign Key)約束。
外來鍵的作用 保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。使兩張表形成關聯,外來鍵只能引用外表中的列的值!用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。foreign key 約...
foreign key 外來鍵 建立 刪除
注意 支援外來鍵表的型別是 innodb 建立外來鍵語法 alter table 表名 add constraint 外來鍵名稱 起名字 foreign key 外來鍵欄位名 r eferences 外表表名 主鍵欄位名 例項 建立表 grade student 型別innodb alter tab...