碼是最寬泛的概念,主碼、候選碼都屬於碼。
設爲中的屬性或屬性組合,若,則爲的候選碼。若候選碼多於一個,則選定其中的一個爲主碼。
(要看懂以上概念,需要掌握完全函數依賴的相關概念)
通俗的舉例:
假設有一個列表,列名爲大寫的ABCDEF,內容小寫。
假設A能推出其餘所有BCDEF(能唯一區分不同元組的屬性),那麼A就是一個碼。又或者組合(B,C)也能推出其餘所有ADEF(能唯一區分不同元組的屬性組合),那麼這個組合(B,C)也是碼。那麼這個表的碼有:①A; ②(B,C);③其他包含①或②的集合。
候選碼就是碼的基礎上篩選:真子集不能是碼。單個碼A本身也是候選碼,因爲空集是任何一個非空集合的真子集,碼的子集(空集)當然不能推出其他列信息。可以選擇A,也可以選擇(B,C),但是不能選擇(A,B,C),因爲這樣的組合存在真子集(B,C)或者A使得這個子集能夠推出其他列的信息。也不能選擇單個B或者單個C,因爲這樣單個的B或者C都不是碼。也不能選擇大於A或者(B,C)的集合如(B,C,D),這樣的話它的真子集(B,C)還是碼,不符合完全函數依賴的要求(也就是說,候選碼的真子集不能再出現碼)。
A | B | C | D | E | F |
a1 | b1 | c1 | d1 | e1 | f1 |
a2 | b2 | c2 | d2 | e2 | f2 |