數據庫之碼、超碼、候選碼

碼是數據系統中的基本概念。所謂碼就是能唯一標識實體的屬性,他是整個實體集的性質,而不是單個實體的性質。它包括超碼,候選碼,主碼。 超碼是一個或多個屬性的集合,這些屬性可以讓我們在一個實體集中唯一地標識一個實體。如果K是一個超碼,那麼K的任意超集也是超碼,也就是說如果K是超碼,那麼所有包含K的集合也是超碼。 候選碼是從超碼中選出的,自然地候選碼也是一個或多個屬性的集合。因爲超碼的範圍太廣,很多是我們並不感興趣即無用處的。所以候選碼是最小超碼,它們的任意真子集都不能成爲超碼。例如,如果K是超碼,那麼所有包含K的集合都不能是候選碼;如果K,J都不是超碼,那麼K和J組成的集合(K,J)有可能是候選碼。 是從多個候選碼中任意選出一個做爲主碼,如果候選碼只有一個,那麼候選碼就是主碼。雖然說主碼的選擇是比較隨意的,但在實際開發中還是要靠一定的經驗,不然開發出來的系統會出現很多問題。一般來說主碼都應該選擇那此從不或者極少變化的的屬性。
超碼:一個或多個屬性的集合,這些屬性的組合可以使我們在一個實體集中唯一的標識一個實體。


例如:學生是一個實體,則學生的集合是一個實體集,而超碼是用來在學生的集合中區分不同的學生。假設學生(實體)具有多個屬性:學號,身份證號,姓名,性別。因爲通過學號可以找到唯一一個學生,所以{學號}是一個超碼,同理{學號,身份證號}、{學號,身份證號,姓名}、{學號,身份證號,姓名,性別}、{身份證號}、{身份證號,姓名}、{身份證號,姓名、性別}也是超碼.在這裏,因爲不同的學生可能擁有相同的姓名,所以姓名不可以區別一個學生,既{姓名}不是一個超碼,{性別}、{姓名、性別}也不是。

雖然超碼可以唯一標識一個實體,但是可能大多數超碼中含有多餘的屬性。所以我們需要候選碼。


候選碼:如果任意超碼的真子集不能包括超碼,則稱其爲候選碼;超碼包括候選碼;

在上例中,只有{學號}、{身份證號}都是候選碼;另外,如果性別和姓名可以唯一標識一個學生,則{姓名,性別}也爲超碼。


主碼:被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼;此外,應該選擇哪些從不或極少變化的屬性;


總結: 所有碼都是一個集合。 所有可以用來在實體集中標識唯一實體的集合,都是超碼。 如果任意超碼的真子集不能包括超碼,則稱其爲候選碼。 被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼。 超碼包括候選碼,候選碼包括主碼。

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