数据库求候选码的算法

【例】 关系模型R<U,F>,U={A,B,C,D},求R候选码。
在求解之气那先要明白一些定理。我们把函数依赖集中F的属性分为四类:

  • L类:所有依赖关系中仅出现在函数依赖左部的属性。

  • R类:所有依赖关系中仅出现在函数依赖右部的属性。

  • LR类:所有依赖关系中基础心啊在函数依赖左部又出现在函数依赖右部的属性。

  • N类:所有依赖关系中没有出现的属性。

    定理一: 对于给定的关系模式R及其函数依赖集F,若X(X∈U)是L类属性,则X比为R的任一候选码成员。
    定理二: 对于给定的关系模式R及其函数依赖集F,若X(X∈U)是R类属性,则X类不在任何候选码中。
    定理三: 对于给定的关系模式R及其函数依赖集F,若X(X∈U)是LR类属性,则X可能在候选码中。
    定理四: 对于给定的关系模式R及其函数依赖集F,若X(X∈U)是N类属性,则X比包含在R的任一候选码中。

第一步:先判断属性集U中所有属性属于哪一类。A仅出现在AB→C左边,属于L类。B仅出现在B→D左边和AB→C左边,属于L类,C出现在AB→C,属于R类。D仅出现在B→D右边属于R类。

第二步:有定理可知,A,B必在候选码中,C,D必不在候选码中。因为不知道是否还有其他属性,假定目前候选码K=AB。

第三步:求K=AB的闭包。根据闭包算法(具体见闭包求法)得:(AB)+ =ABCD,发现AB的闭包等于属性集U。可以的出结论K=AB就是R的候选码,且是唯一候选码。

但如果第三步中,求得的闭包不等于U,就需要继续算下去,看例2.
【例】 关系模型R<U,F>,U={A,B,C,D},F={BCD→A,A→C},求R候选码。
第一步:同样对U中属性进行分类,得出A是LR类,B是L类,C是LR类,D是L类。

第二步:由定理可知,B,D必在候选码中,A,C可能在候选码中。假定目前候选码K=BD。

第三步:求K=BD的闭包。根据闭包算法得,(BD)+ =ABCD,正好等于U,说明K=ABDR的一个候选码。再从LR类中取C,得到K=BCD,再求除K=BCD的闭包,得到**(BCD)+ =ABCD**,也等于U,说明K=BCD也是R的一额候选码。所以R的候选码K={ABD,BCD}。

  • 12
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值