如何求关系模式的候选码

  • Post author:
  • Post category:其他


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

多个


欢迎大家关注下个人的「公众号」:

独醉贪欢


后台回复「无脑死磕数据库原理」即可获得练习题



版权声明:本文为weixin_41640994原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。