候选码求解算法——数据库考试复习

前言

定义:设K为关系模式R<U, F>中的属性或属性组。若U完全依赖K,则K称为R的一个候选码(Candidate Key)。换句话说,R中所有属性完全依赖于K,不存在K’是K的真子集,使得U完全依赖K’成立,则K是关系模式R的候选码。候选码可以通过函数依赖推出,其推出算法如下:

候选码求解算法、

对于给定的关系模式R<U, F>,依照函数依赖集F将U中的属性分为以下四类:
L类属性: 在F中只出现在函数依赖的左部的属性;
R类属性: 在F中只出现在函数依赖的右部的属性;
LR类属性: 分别出现在F中的函数依赖左部和右部的属性;
N类属性: 不在F中的函数依赖中出现的属性

L类属性和N类属性必包含于任何候选码中,R类属性必不包含于任何候选码中, LR类属性不能确定是否在候选码中,假设X是LR码中的属性或属性组,则转换求X在F下的属性闭包,如果属性闭包包含所有的属性,则X是候选码,否则X不是候选码
注:候选码不一定只有一个,求候选码,需要写出全部的候选码。

示例1】关系模式R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},求R的候选码
解:A1是L属性,则候选码一定包含A1
A1 F + _F^+ F+={A1A2A3A4},包含了所有属性,因此A1是候选码。

示例2】设R<U, F>,其中: U={A,B,C,D,E},F={A→BC, CD→E, B→D, E→A},求R的所有候选码
解:R中无L、N类属性,A, B,C,D,E均为LR类属性。
A F + _F^+ F+={ABCDE},包含所有属性,因此A是候选码
B F + _F^+ F+={BD},不包含所有属性,因此B不是候选码
C F + _F^+ F+={C},不包含所有属性,因此C不是候选码
D F + _F^+ F+={D},不包含所有属性,因此D不是候选码
E F + _F^+ F+={EABCD},包含所有属性,因此E是候选码
因为A、E是候选码,A、E与任何属性的组合都会是U对A、对E的部分依赖。其余的候选码只需在BCD组合中去找。
BC F + _F^+ F+={ABCDE},包含所有属性,因此BC是候选码
BD F + _F^+ F+={BD},不包含所有属性,因此BD不是候选码
CD F + _F^+ F+={ABCDE},包含所有属性,因此CD是候选码
因为:{BC}是{BCD}的真子集,BCD一定不是码

总结

依据定理:F为属性集U上的一组函数依赖,X,Y ⊆U,X→Y能由F 根据Armstrong公理导出的充分必要条件是Y⊆X F + _F^+ F+,换句话说:F蕴含不蕴含X→Y,可以由Y是不是X关于F的闭包的子集进行推导。将候选码求解问题转换为,求属性闭包问题,如果某个属性或属性组的属性闭包包含了所有属性,但其真子集不包含所有属性,那么这个属性或属性组就是候选码。候选码求解是常考题目,只有得到了候选码,才可能得到主属性、非主属性,才可能完成范式的判定。

  • 14
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值