对于给定的关系模式R(A,A1,A2,…,An)和函数依赖集F,可以把属性分为以下四类
- L类:仅出现在F中的函数依赖左边的左部属性
- R类:仅出现在F的函数依赖右边右部属性
- N类:在F的函数依赖左右边均未出现的属性
- LR类:在F的函数依赖左右两边均出现的属性
对于给定的关系模式R及其函数依赖集F,有以下结论
- 若X(X ∈ R)是L类属性,则X必为R的任一候选码的成员
- 若X(X ∈ R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码
- 若X(X ∈ R)是R类属性,则X不在任何候选码中
- 若X(X ∈ R)是N类属性,则X必为R的任一候选码成员
- 若X(X ∈ R)是R的N类和L类属性组成的属性集,且X+包含了R的全部属性,则X是R的唯一候选码
- 若X(X ∈ R)是LR类属性属性,则X可能为R的任一候选码的成员,也可能不为R的任一候选码成员
上面的内容过了一遍后,我们来用例子讲解
关系模式R(A,B,C,D,E),函数依赖F(A→D,E→D,D→B,BC→D,CD→A),求R的候选码
- 首先把属性分类
由函数依赖F知:
L类的属性有C、E;
R类的属性没有;
N类的属性没有;
LR类的属性有:A、B、D。
- 设X代表L、N类属性,Y代表LR类属性
令{C,E} ∈ X,{A、B、D} ∈ Y
- 求X+
因为C→∅,所以C+ = ∅
因为E → D,所以E+ = {DE};又因为D→B,所以 E+ = {BDE}
因为E → D,所以(CE)+= {CDE};又因为D→B,所以 (CE)+ = {BCDE};又因为CD → A,所以(CE)+ = {ABCDE}
故CE为R的唯一候选码
注意:如果X+中没有R的全部属性,即从Y中拿出一个属性来和X中的属性组合
假设上面X+中没有R的全部属性,即从Y中拿出属性A
因为C→∅,所以(AC)+ = ∅,所以AC不是R的候选码
因为E → D,所以(AE)+ = {ADE};又因为D→B,所以 (AE)+ = {ABDE},所以AE不是R的候选码
然后求(ACE)+,如果ACE不是候选码,就重新从Y中选择一个属性组成BC、BE、BCE,依次类推
如果拿Y中的一个属性求不出候选码,就拿Y中的两个属性组合求
哦对了,关系模式R的候选码可以多个
欢迎大家关注下个人的「公众号」:独醉贪欢
后台回复「无脑死磕数据库原理」即可获得练习题