什么是候选码?
首先来看候选码的定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。
准则:
确定关系模式的候选码是进行规范化分析的出发点,有下述准则可以使用:
关系R(U,F)中,F是最小函数依赖集。
准则1:如果属性A只在F中各函数依赖的左端出现,则A必是码中的属性;
准则2:如果属性A只在F中各函数依赖的右端出现,则A必不是码中的属性;
步骤
对于关系模式R(U,F),求F的最小函数依赖集,仍用F表示。
根据准则1,确定码中必须有的属性集(设为M)。
根据准则2,去掉码中没有的属性集。
确定余下的属性集(设为W)。
从M开始,令K=M,如果,K的闭包等于U,则K就是候选码。否则从W选择属性加入到K中,直到K的闭包等于U,K就是候选码。
注意可能有多个候选码。
例子
设R(U,F),U=ABCDEG,
F{BE→G,BD→G,CDE→AB,CD→A,CE→G,BC→A,B→D,C→D},求R的码。
解:(1) 求得
Fmin={B→G,CE→B,C→A,CE→G,B→D,C→D }
(2) 只在左端出现的属性CE (M=CE)。
(3) 只在右端出现的属性ADG。
(4) 余下的属性B (W=B)。
R的候选码只可能是CE、CEB。
经计算
因此R的码是CE。