如何求关系模式的候选码

对于给定的关系模式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的候选码

  1. 首先把属性分类
由函数依赖F知:
	L类的属性有C、E;
	R类的属性没有;
	N类的属性没有;
	LR类的属性有:A、B、D。
  1. 设X代表L、N类属性,Y代表LR类属性
令{C,E} ∈ X,{A、B、D} ∈ Y
  1. 求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的候选码可以多个


欢迎大家关注下个人的「公众号」:独醉贪欢
后台回复「无脑死磕数据库原理」即可获得练习题

上一篇:5.线性回归算法


下一篇:腾讯CSIG应用研究一面