什么是候选码?

码是最宽泛的概念,主码、候选码都属于码。

K K K R < U , F > R R<U,F>中的属性或属性组合,若 K ⟶ F U K\stackrel{F}{\longrightarrow}U KFU,则 K K K R R R候选码。若候选码多于一个,则选定其中的一个为主码
(要看懂以上概念,需要掌握完全函数依赖的相关概念)

通俗的举例:
假设有一个列表,列名为大写的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

你可能感兴趣的:(数据库系统概论)