对于给定的关系模式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(A,B,C,D,E,F),其函数依赖集F={AB→E,AC→F,AD→B,B→C,C→D}
- L类属性:A
- R类属性:E、F
- LR类属性:B、C、D
- 令L类属性的元素为X,LR类的为Y
-
X
+
= A(A
+
= A) -
从Y中取出一个元素B,与X结合得,(AB)
+
= ABCDEF -
从Y中取出一个元素C,与X结合得,(AC)
+
= ABCDEF -
从Y中取出一个元素D,与X结合得,(AD)
+
= ABCDEF
故关系模式的候选码有:AB、AC、AD
注:A单独推导不出其它元素,因为函数依赖集中,没有A → ?,只有
A?→ 元素
哦对了,关系模式R的候选码可以
多个
欢迎大家关注下个人的「公众号」:
独醉贪欢
后台回复「无脑死磕数据库原理」即可获得练习题