超碼
一個或多個屬性的集合,這些屬性的組合可以使我們在一個關系中唯一地標識一個元組。
這個集合可以用來區分同一個表中的元組,比如 ID 可以作為超碼,因為它是唯一的。當一個屬性就能區分同一個表中的元組,這個屬性就是超碼,而且它和同一個表中的任意屬性組成集合,這個組合都是超碼。
舉例:ID 這個屬性,在該表中,任意不同元組都不會取相同的ID值,那么 ID 是超碼,且 ID和任何屬性再組成集合,這個集合還是超碼,ID,name這個集合還是超碼。
候選碼
最小超碼
超碼這個集合中,如果提取它們的某個子集,這個子集是可以用來區分同一個表中的元組,且該子集只有一個元素或者再從中提取的子集無法用來區分同一個表中的元組,這個集合就是候選碼。一個關系表中至少有一個候選碼。
舉例:超碼的例子中,ID也是候選碼,但是 ID,name不是候選碼,因為從這個集合中提取的子集還可以用來區分同一個表中的元組。假如這個表中還有 name,anothername,並且這個集合滿足候選碼條件,那么這個關系中就有 ID 和 name,anothername 兩個候選碼
主碼
被數據庫設計者選中的、主要用來在一個關系中區分不同元組的 候選碼。
我們人為取一個關系中的某個候選碼,定義為主碼並使用。
全碼
一個關系中所有屬性組組成該關系模式的 候選碼,稱為 全碼。
主屬性
候選碼中所有屬性的並集中的任意一個屬性
非主屬性
不包含在候選碼中的屬性