如何求关系模式的候选码

1,565 阅读2分钟

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


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