首先看看各種鍵的定義:
超鍵(super key):在關係中能唯一標識元組的屬性集稱為關係模式的超鍵(只要有乙個鍵唯一,再隨便組其他的鍵,合起來叫主鍵)
候選鍵(candidatekey):不含有多餘屬性的超鍵稱為候選鍵(最小的超鍵,id,身份證號)
主鍵(primary key):關係型資料庫中的一條記錄中有若干個屬性,若其中某乙個屬性集(注意是集)能唯一標識一條記錄,該屬性組就可以成為乙個主鍵(在超鍵選取乙個作為主鍵,如果有多個欄位的叫為聯合主鍵)
外來鍵(foreign key)如果關係模式r1中的某屬性集不是r1的主鍵,而是另乙個關係r2的主鍵則該屬性集是關係模式r1的外來鍵。
結合例項的具體解釋:
假設有如下兩個表:
學生(學號,姓名,性別,身份證號,教師編號)
教師(教師編號,姓名,工資)
超鍵:
由超鍵的定義可知,學生表中含有學號或者身份證號的任意組合都為此表的超鍵。如:(學號)、(學號,姓名)、(身份證號,性別)等。
候選鍵:
候選鍵屬於超鍵,它是最小的超鍵,就是說如果再去掉候選鍵中的任何乙個屬性它就不再是超鍵了。學生表中的候選鍵為:(學號)、(身份證號)。
主鍵:
主鍵就是候選鍵裡面的乙個,是人為規定的,例如學生表中,我們通常會讓「學號」做主鍵,教師表中讓「教師編號」做主鍵。
外來鍵:
外來鍵比較簡單,學生表中的外來鍵就是「教師編號」。外來鍵主要是用來描述兩個表的關係。
超鍵(super key):在關係中能唯一標識元組的屬性集稱為關係模式的超鍵
候選鍵(candidate key):不含有多餘屬性的超鍵稱為候選鍵
主鍵(primary key):使用者選作元組標識的乙個候選鍵程式主鍵
比如乙個小範圍的所有人,沒有重名的,考慮以下屬性
身份證 姓名 性別 年齡
身份證唯一,所以是乙個超鍵
姓名唯一,所以是乙個超鍵
(姓名,性別)唯一,所以是乙個超鍵
(姓名,性別,年齡)唯一,所以是乙個超鍵
--這裡可以看出,超鍵的組合是唯一的,但可能不是最小唯一的
身份證唯一,而且沒有多餘屬性,所以是乙個候選鍵
姓名唯一,而且沒有多餘屬性,所以是乙個候選鍵
--這裡可以看出,候選鍵是沒有多餘屬性的超鍵
考慮輸入查詢方便性,可以選擇 身份證 為主鍵
也可以 考慮習慣 選擇 姓名 為主鍵
--主鍵是選中的乙個候選鍵
一題搞懂什麼是候選鍵
看下題目先
在sql server資料庫中,有乙個學生資訊表如下所示,在該表中不能作為候選鍵的屬性集合為( ) (選擇一項)
學號 姓名 性別 年齡 系別 專業
20020612 李輝 男 20 計算機 軟體開發
20060613 張明 男 18 計算機 軟體開發
20060614 王小玉 女 19 物理 力學
20060615 李淑華 女 17 生物 動物學
20060616 趙靜 男 21 化學 食品化學
20060617 趙靜 女 20 生物 植物學
a) b)
c) d)
e) 可能大家不知道如何來選擇。如果這個題目我們可以正確的解答,那麼對於超鍵以及候選鍵和主鍵的概念已經有很深刻的認識了。
看下概念:
超鍵:在關係中能惟一標識元組的屬性集稱為關係模式的超鍵。
候選鍵:不含有多餘屬性的超鍵稱為候選鍵。也就是在候選鍵中,若要再刪除屬性就不是鍵了。
主鍵:使用者選作元組標識的乙個候選鍵稱為主鍵。
透過概念,我們可以了解到,超鍵包含著候選鍵,候選鍵中包含著主鍵。主鍵一定是惟一的。為什麼呢?因為他的爺爺超鍵就是惟一的。
我們分析一下上面的題目,abcde5個答案都可以作為超鍵,他們組合在一起的集合可以用來惟一的標識一條資料記錄(實體)。
請注意我們的要求:候選鍵。候選鍵要求是不能包含多餘屬性的超鍵,我們看一下答案b。在答案b中,如果我們不使用姓名也可以惟一的
標識一條資料實體,可以說姓名欄位在這裡是多餘的。那麼很明顯,b選項包含了多餘字段屬性。那麼這題答案應該選擇b
那麼其他的4個選項都可以作為候選鍵,假設很幸運,a)學號 被選擇作為使用者正在使用的候選鍵來惟一標識元組了,那麼他很幸運的獲得了主鍵的稱號。
其實「主鍵是唯一的索引」這話有點歧義的。舉個例子,我們在表中建立了乙個id欄位,自動增長,並設為主鍵,這個是沒有問題的,因為「主鍵是唯一的索引」,id自動增長保證了唯一性,所以可以。
此時,我們再建立乙個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違「主鍵是唯一的索引」這句話麼?
所以我才說「主鍵是唯一的索引」是有歧義的。(復合主鍵)應該是「當表中只有乙個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為復合主鍵,復合主鍵聯合保證唯一索引」。
為什麼自增長id已經可以作為唯一標識的主鍵,為啥還需要復合主鍵呢。因為,並不是所有的表都要有id這個欄位啊哈哈,比如,我們建乙個學生表,沒有唯一能標識學生的id,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個字段設定為主鍵,形成復合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。
什麼是資料表的復合主鍵
所謂的復合主鍵 就是指你表的主鍵含有乙個以上的字段組成
比如create table test
(name varchar(19),
id number,
value varchar(10),
primary key (name,id)
)上面的name和id欄位組合起來就是你test表的復合主鍵
它的出現是因為你的name欄位可能會出現重名,所以要加上id欄位這樣就可以保證你記錄的唯一性
一般情況下,主鍵的字段長度和字段數目要越少越好
聯合主鍵
什麼是聯合主鍵?
(主鍵原則上是唯一的,別被唯一值所困擾。)
顧名思義就是多個主鍵聯合形成乙個主鍵組合
乙個簡單的例子
主鍵a跟主鍵b組成聯合主鍵
主鍵a跟主鍵b的資料可以完全相同(困擾吧,沒關係),聯合就在於主鍵a跟主鍵b形成的聯合主鍵是唯一的。
下例主鍵a資料是1,主鍵b資料也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(這就是多對多關係)
主鍵a資料主鍵b資料
1 1
2 2
3 3
主鍵a與主鍵b的聯合主鍵值最多也就是
1112
1321
2223
3132
33
超鍵 候選鍵 主鍵 外來鍵
超鍵 super key 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵 候選鍵 candidate key 不含有多餘屬性的超鍵稱為候選鍵 主鍵 primary key 關係模式中使用者正在使用的候選鍵稱主鍵,主鍵是人為規定的 外來鍵 foreign key 如果關係模式r1中的某屬性集不是r1...
超鍵 候選鍵 主鍵 外來鍵
超鍵 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。乙個屬性可以為作為乙個超鍵,多個屬性組合在一起也可以作為乙個超鍵。超鍵包含候選鍵和主鍵。候選鍵 是最小超鍵,即沒有冗餘元素的超鍵。主鍵 資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的組合。乙個資料列只能有乙個主鍵,且主鍵的取值不能缺...
Mysql 主鍵 超鍵 候選鍵 外來鍵
超鍵 super key 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵 候選鍵 candidate key 不含有多餘屬性的超鍵稱為候選鍵。也就是在候選鍵中,若再刪除屬性,就不是鍵了!主鍵 primary key 使用者選作元組標識的乙個候選鍵程式主鍵 外來鍵 foreign key 如果關係模...