数据库求候选键


算法

1.给定关系模式R(U,F),X∈U,将R的所有属性分为L,R,N和LR四类。

L:表示属性只在函数依赖的左边出现;
R:表示属性只在函数依赖的右边出现
N:表示属性在函数依赖中左右都未出现;
LR:表示属性既可以出现在左边,又可以出现在右边;

2.令X = L u N,Y = LR。求X的闭包,若X的闭包包含了R的所有属性,则X为R的唯一候选码,转5。

3.Y中选取任意一个属性A,求(XA)的闭包,若它包含了R的全部属性,则是候选码。调换属性,反复进行这个过程,知道试完Y中的所有属性。

4.如果已找出所有的候选码,转5,否则在Y中一次选取2个属性,3个属性,…,求它们的闭包。若其闭包包含R的全部属性,则是候选码。

5.结束算法,输出候选码。


定理

(1)若X是L类属性,则X必为R的候选码成员;若X的闭包包含全部属性U,则X必为R的唯一候选码。
(2)若X是R类属性,则X不在任何候选码中。
(3)若X是N类属性,则X必为R的候选码成员。
(4)若X是L类和N类属性组成的属性集,且X的闭包包含U,则X是R的唯一候选码。
(5)若X是LR类属性,则X可能为R的任一候选码的成员,也可能不为R的任一候选码的成员。


实例

例:关系模式R(A,B,C,D,E,F),函数依赖F={A→BC,BC→A,BCD→EF,E→C},求R的候选码。

1.首先找出L,R,N,LR四中属性分类
L:D
R:F
N:
LR:A,B,C,E

(注意:如果R ={A,B,C,D,Z},因为Z不出现在函数依赖F的任何一边中,所以Z属于N类,Z必为候选码成员)

2.令X = L u N = {D},则X = {D},此时就要去找D的闭包,从函数依赖F中可看到D不能决定任何一个其它属性,所以D的闭包D+ = {D},因此不是候选码。

(注意:如果此时D的闭包等于R全集,那么D就是唯一的候选码,算法退出)

3.从LR中分别选取一个属性和第2步的L属性进行组合,然后再求各自的闭包。如(注意:第3步后所求到的候选码都不是唯一的)

选取A :(AD)+ = {A,D,B,C,E,F} = R
解释:因为A→BC,BCD→EF,所以AD u BC u EF = ABCDEF,所以AD是候选码

选取B:(BD)+={B,D} ≠ R
解释:因为B和D都不能推出其它的属性,所以BD不是候选码

选取C:(CD)+={C,D} ≠ R
解释:因为C和D都不能推出其它的属性,所以CD不是候选码

选取E:(ED)+={E,D,C} ≠ R
解释:因为E→C,但C和D都不能推出其它的属性,所以ED也不是候选码

4.这一步是要选择LR中的两个属性和D相结合,因为在上一步骤中选取了属性A,所以还剩下属性B,C,E未使用

选取BC :(BCD)+={D,B,C,E,F,A} = R
解释:因为BC→A,BCD→EF,BCD u A u EF = ABCDEF, 所以BCD是候选码

选取BE:(BED)+={D,B,E,C,A,F} = R
解释:因为E→C,BC→A,BCD→EF,BED u C u A u EF = ABCDEF,所以BED是候选码

选取CE:(CED)+={C,E,D} ≠ R
解释:因为C、D推不出其它属性,E→C,CE、CD、ED也推不出其它属性,所以CED不是候选码

因为这一步选取了BC和BE,所以属性B、C、E已经被选用,加上上一步选取的A属性,LR中的属性已全部选完,也可以理解为LR中无新的属性组合

综上所诉,输出的候选码为AD、BCD和BED


总结

上诉加号都表示闭包的意思,求候选码需要先懂得如何求闭包。

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值