先說一下屬性的定義:
表的每一行對應一個元組,表的每一列對應一個域。由於域可以相同,為了加以區分,必須對每列起一個唯一的名字,稱為屬性(Attribute)。
再來看看幾個鍵的定義:
超鍵:在關系模式中,能唯一標識元組的屬性集稱為超鍵。
候選鍵 :如果一個屬性集能唯一標識元組,且有不包含多余屬性,那么這個屬性集稱為候選鍵(候選鍵是沒有多余屬性的超鍵)
主鍵:關系模式中用戶正在使用的候選鍵稱主鍵(primary key)。一般,如不加說明,鍵是指主鍵。
外鍵:在關系模式R中,如果某屬性集是其他模式的候選鍵,那么該屬性集對模式R來說就是外鍵
主要說一下前三個鍵的區別:
網上有一個很經典的習題用於說明這三個鍵的區別:
學號 姓名 性別 年齡 系別 專業
20020612 李輝 男 20 計算機 軟件開發
20060613 張明 男 18 計算機 軟件開發
20060614 王小玉 女 19 物理 力學
20060615 李淑華 女 17 生物 動物學
20060616 趙靜 男 21 化學 食品化學
20060617 趙靜 女 20 生物 植物學
a){學號}
b){學號、姓名}
c){年齡、系別}
d){姓名、性別}
e){姓名、專業}
原文有解答,但或許有的人似乎看的不太懂。這里說一下我的理解:
這里的【學號 】 【 姓名】 【性別 】 【 年齡】 【 系別】 【 專業】所對應的每一個列稱為一個域,其本身為列的屬性,再啰嗦一點的說,比如下面這一列,
學號
20020612
20060613
20060614
20060615
20060616
20060617
其屬性就為【學號】。屬性集就是屬性的集合,比如:{年齡、系別}
再比如下面這一行:
20020612 李輝 男 20 計算機 軟件開發
就稱為一條記錄或者說是一個元組。
a選項{學號}可以唯一的標識一個元組,比如說我們用20060616就可以知道是性別為男,名字為趙靜的人。由於沒有多余的屬性,所以{學號}既可以稱為一個超鍵,也可以稱為一個候選鍵。
b選項{學號、姓名}也可以唯一的標識一個元組,但是這個集合里的姓名屬性是不必要的,也就是多余的,即如果沒有【姓名】屬性,那么這個集合
{學號、姓名}也可以唯一確定一個元組。由於有多余的屬性,所以{學號、姓名}可以稱為超鍵,但是不能稱為候選鍵。
c,d,e選項均可以唯一的標識一個元組,並且其中每一個屬性均是必須的,去掉任意一個屬性,那么其所在的集合便不能唯一的標識一個元組,所以c,d,e 均可以稱為超鍵,也可以稱為候選鍵。
所以這道題中,應該選b。
主鍵就是在候選鍵中任意選一個鍵。
總結:
候選鍵可以稱之為超鍵,但超鍵不一定可以稱為候選鍵。候選鍵的屬性一定不多余,但超鍵的屬性不一定均有用。用集合的關系來說就是候選鍵隸屬於超鍵,而主鍵為候選鍵中的一個元素。
