資料庫中外鍵的作用以及和主鍵的區別

2021-08-03 19:22:01 字數 1525 閱讀 9600

外來鍵是資料庫一級的乙個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。   

外來鍵屬性當然是可以去掉的,如果你不想再用這種約束,對程式設計當然不會有什麼影響,但相應的錄入資料的時候就不對錄入的資料進行「參照完整性」檢查了。   

例如有兩個表   

a(a,b)   :a為主鍵,b為外來鍵(來自於b.b)   

b(b,c,d)   :b為主鍵    

如果我把字段b的外來鍵屬性去掉,對程式設計沒什麼影響。

如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外來鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。

1、外建表達的是參照完整性:這是資料固有的,與程式無關。因此,應該交給dbms來做。   

2、使用外建,簡單直觀,可以直接在資料模型中體現,無論是設計、維護等回有很大的好處,特別是對於分析現有的資料庫的好處時非常明顯的--前不久我分析了乙個企業現有的資料庫,裡面的參照完整性約束有的是外來鍵描述,有的是用觸發器實現,感覺很明顯。當然,文件裡可能有,但是也可能不全,但是外來鍵就非常明顯和直觀。   

3、既然我們可以用觸發器或程式完成的這個工作(指參照完整性約束),dbms已經提供了手段,為什麼我們要自己去做?而且我們做的應該說沒有rdbms做得好。實際上,早期的rdbms並沒有外來鍵,現在都有了,我認為資料庫廠商增加這個功能是有道理的。從這個角度來說,外來鍵更方便。   

4、關於方便,根據我帶專案的情況來看,程式設計師確實有反映,主要是在除錯時輸入資料麻煩:如果資料可以違反參照完整性,那麼就是說參照完整性本身就不對名譽業務衝突,此時也不應該用觸發**程式實現;否則,說明資料是錯誤的,根本就不應該進入資料庫!而且,這也應該是測試系統的乙個內容:阻止非法資料。實際上,前台程式應該對這種提交失敗做出處理。資料是企業的而非程式的,儲程式要盡量與資料分離,反之亦然。

最後說一下,建鍵幾個原則:

1、 為關聯字段建立外來鍵。

2、 所有的鍵都必須唯一。

3、避免使用復合鍵。

4、外來鍵總是關聯唯一的鍵字段。 

定義主鍵和外來鍵主要是為了維護關聯式資料庫的完整性,總結一下:

一、主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。

外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持資料的一致性。比如,

a表中的乙個字段,是

b表的主鍵,那他就可以是

a表的外來鍵。

二、主鍵、外來鍵和索引的區別

定義:

主鍵--

唯一標識一條記錄,不能有重複的,不允許為空 外來鍵

--表的外來鍵是另一表的主鍵

, 外來鍵可以有重複的

, 可以是空值 索引

--該欄位沒有重複值,但可以有乙個空值

作用: 主鍵

--用來保證資料完整性 外來鍵

--用來和其他表建立聯絡用的 索引

--是提高查詢排序的速度

個數: 主鍵

--主鍵只能有乙個 外來鍵

--乙個表可以有多個外來鍵 索引

--乙個表可以有多個唯一索引

資料庫中外鍵的作用

為了一張表記錄的資料不要太過冗餘。這和軟體工程的模組化思想差不多類似,只不過在資料庫中是對錶關係進行解耦,盡量讓表 記錄的資料單一化。就如你貼的中,把成績和學生資訊放在一張表中就太冗餘了,成績完全可以以學生的id作為區分標識。你想想,你的圖中的第一章表分割成了表1和表2,表2的學號引用了表1的學號字...

資料庫的主鍵和外來鍵

資料庫主鍵是指表中乙個列或列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。乙個表只能有乙個 primary key 約束,而且 primary key 約束中的列不能接受空值。主鍵具有的特點 唯一性 非空性。思考 主鍵帶來了什麼樣的優點和缺點?外來鍵...

mysql中外鍵的作用和舉例

1 基本介紹 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的指定列的值!建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表的主鍵 指定外來鍵關鍵字 foreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on...