数据库根据函数依赖求候选码

设关系模式R<U, F>

将R的所有属性分为 L、 R、N和 LR四类,并令X代表L、N两类,Y代表LR类。

L类: 仅出现在F的函数依赖左部的属性;
R类: 仅出现在F的函数依赖右部的属性;
N类: 在F的函数依赖左右两边都不出现的属性;
LR类:在F的函数依赖左右两边都出现的属性 。

1.求属性集闭包X+,若 X+包含了R的全部属性则X即为R的唯一候选码, 转(4);
2.否则, 在Y中取一属性A,求属性集闭包(XA)+,若(XA)+包含了R的全部属性,则转4;否则,调换一属性反复进行这一过程,直到试完所有Y中的属性。
3.如果已找出了所有的候选码,则转(4);否则在Y中依次取2个、3个、…属性,求X与它们的属性集闭包,直到其闭包包含R的全部属性。
4.停止,输出结果。

例1: 设关系模式R(A, B, C, D), 其函数依赖集: F={D→B, B→D, AD→B, AC→D},求R的所有候选码。
解:
L类: A, C R类: N类: LR类: B, D 因为(AC)F+=ACDB,所以AC是R的唯一候选码

例2:设关系模式R(A, B, C, D, E, P), 其函数依赖集: F={A→D, E→D, D→B, BC→D,
DC→A},求R的所有候选码。 解: L类: C, E R类: N类: P LR类: A, B, D
因为(CEP)F+=CEPDBA,所以CEP是R的唯一候选码。

例3: 设关系模式R(S, D, I, B, O, Q), 其函数依赖集: F = { S→D, I→B, B→O, O→Q, Q→I
},求R的所有候选码。 解: L类(S); R类(D) ; N类(无) ; LR类(I, B, O, Q) 因为S+=SD,
所以S不是R的候选码; 因为(SI)+=SIDBOQ,所以SI是一个候选码; 因为(SB)+=SBDOQI,所以SB也是一个候选码;
因为(SO)+=SODQIB,所以SO也是一个候选码; 因为(SQ)+=SQDIBO,所以SQ也是一个候选码。

  • 17
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值