搬運出處: https://github.com/0voice/interview_internal_reference
超鍵(super key): 在關系中能唯一標識元組的屬性集稱為關系模式的超鍵
候選鍵(candidate key): 不含有多余屬性的超鍵稱為候選鍵。也就是在候選鍵中,若再刪除屬性,就不是鍵了!
主鍵(primary key): 用戶選作元組標識的一個候選鍵程序主鍵
外鍵(foreign key):如果關系模式R中屬性K是其它模式的主鍵,那么k在模式R中稱為外鍵。
舉例
比如有如下數據:
| 學號 | 姓名 | 性別 | 年齡 | 系別 | 專業
|:---: |:---: |:---: |:---: |:---: |:---:
|20020612 | 李輝 | 男 |20 |計算機 |軟件開發
|20060613 | 張明 | 男 |18 |計算機 |軟件開發
|20060614 | 王小玉 | 女 |19 |物理 |力學
|20060615 | 李淑華 | 女 |17 |生物 |動物學
|20060616 | 趙靜 | 男 |21 |化學 |食品化學
|20060617 | 趙靜 | 女 |20 |生物 |植物學
-
超鍵
在關系中能唯一標識元組的屬性集稱為關系模式的超鍵。
於是我們從例子中可以發現 學號是標識學生實體的唯一標識。那么該元組的超鍵就為學號。
除此之外我們還可以把它跟其他屬性組合起來,比如:
(
學號
,性別
)(
學號
,年齡
)這樣也是超鍵.
-
候選鍵
不含多余屬性的超鍵為候選鍵。
根據例子可知,學號是一個可以唯一標識元組的唯一標識,因此學號是一個候選鍵,實際上,候選鍵是超鍵的子集,比如 (學號,年齡)是超鍵,但是它不是候選鍵。因為它還有了額外的屬性。
-
主鍵
用戶選擇的候選鍵作為該元組的唯一標識,那么它就為主鍵。
簡單的說,例子中的元組的候選鍵為學號,但是我們選定他作為該元組的唯一標識,那么學號就為主鍵。
-
外鍵
總結
主鍵為候選鍵的子集,候選鍵為超鍵的子集,而外鍵的確定是相對於主鍵的。