候选码是什么?
简单来说,候选码是一组属性,可以由这组属性通过函数依赖推出其他属性
一般而言,求的候选码是最简候选码(属性尽可能少)
方法论
求候选码:
① 查看不在函数依赖中的属性,这些属性必须在候选码中
不在函数依赖的属性,意味着不能通过函数依赖推出它
因此要包含在候选码里面,只能自己推出自己
② 查看函数依赖中,只出现在左边 或 右边的属性
只在Left:能够推出别人,别人推不出自己——必须在候选码里面,自己推出自己
只在Right:推不出任何人,不在候选码里面(因为要求最简,只在Right的是冗余)
③ 暂时得到一个集合 X X X ,里面的元素在候选码里面,考虑:
该集合 X X X 是否就是候选码?——求闭包,看能不能直接推出其他属性
如果不是,进行第四步:组合
④ 组合,把剩余的属性一个一个地放进 X X X,形成新的集合 X 1 , X 2 ⋯ X_1,X_2\cdots X1,X2⋯
求 X 1 , X 2 ⋯ X_1,X_2\cdots X1,X2⋯ 的闭包,看能不能直接推出其他属性
如果都不行,重复 ④ 操作,继续添加扩充
⑤ 最终得到所有候选码
求主属性、非主属性
在候选码里面出现过的属性,就是主属性(求候选码的并集)
不是主属性的就是非主属性