複合主鍵與複合唯一索引

主鍵的唯一性和聯合主鍵

主鍵是唯一的索引,那麼爲何一個表可以創建多個主鍵呢? 
其實“主鍵是唯一的索引”這話有點歧義的。舉個例子,我們在表中創建了一個ID字段,自動增長,並設爲主鍵,這個是沒有問題的,因爲“主鍵是唯一的索引”,ID自動增長保證了唯一性,所以可以。 
此時,我們再創建一個字段name,類型爲varchar,也設置爲主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違“主鍵是唯一的索引”這句話麼? 
所以我才說“主鍵是唯一的索引”是有歧義的。應該是“當表中只有一個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱爲聯合主鍵,聯合主鍵聯合保證唯一索引”。 
爲什麼自增長ID已經可以作爲唯一標識的主鍵,爲啥還需要聯合主鍵呢。因爲,並不是所有的表都要有ID這個字段啊哈哈,比如,我們建一個學生表,沒有唯一能標識學生的ID,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個字段來唯一標識,這時,我們可以將多個字段設置爲主鍵,形成複合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。

聯合主鍵一般用於在一個字段可能有重複的情況下,用另一個字段去保持其唯一性

比如有兩個字段:name , phone 
name 字段是可能重複的,而 phone 是唯一的 
這時在創建數據表的時候可以在末尾加上: 

PRIMARY KEY(name, phone) 

表示用 name 與 phone 構成聯合主鍵,複合主鍵以保持記錄的唯一性

1、數據庫的每張表只能有一個主鍵,不可能有多個主鍵。 
2、所謂的一張表多個主鍵,我們稱之爲聯合主鍵。 
注:聯合主鍵:就是用多個字段一起作爲一張表的主鍵。 
3、主鍵的主鍵的作用是保證數據的唯一性和完整性,同時通過主鍵檢索表能夠增加檢索速度。

聯合索引

聯合索引可以達到 聯合主鍵一樣的效果, 可以組合確定記錄唯一性

好處:聯合索引對於外鍵不產生子表干擾,對於其它表外鍵引用主表的唯一主鍵即可,否則其它表要引用主表的全部主鍵

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章