主鍵、外鍵、超鍵、候選鍵的區別【Written By KillerLegend】


先說一下屬性的定義:

表的每一行對應一個元組,表的每一列對應一個域。由於域可以相同,為了加以區分,必須對每列起一個唯一的名字,稱為屬性(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。

主鍵就是在候選鍵中任意選一個鍵。

總結:

候選鍵可以稱之為超鍵,但超鍵不一定可以稱為候選鍵。候選鍵的屬性一定不多余,但超鍵的屬性不一定均有用。用集合的關系來說就是候選鍵隸屬於超鍵,而主鍵為候選鍵中的一個元素。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM