数据库——求候选键的方法

1:什么候选键

要是不懂的朋友,但是又迫切想知道但是很懒的不想再查找的呢 可以看这个文章

2:怎么求候选键

在求候选键之前先要讲讲闭包:
当然也是这种概念的东西可以参考这个文章

例(1): 设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+

解:闭包我觉得就是推关系,看能不能根据给定的元素,推演出全部的元素
    在题中,给定了 开始推演的元素 就是AE,
    那就从AE开始:
        忘了讲一个问题:  在上面的题中 A-> D 代表的意思的就是 A能推出B。我们把 A 叫做 前继 节点。把B叫做 后继节点
        AE 就是 前继节点的集合 。
        (1) 首先,在给定的关系 F 中找 前继节点有没有是前继节点集合(AE)的子集的。A->D , E->C 就是我们找到的两个关系式,将找到的两个关系中的后继节点(也就是C,D) 并到前继节点集合中去。则
        (2)现在前继节点的集合就是AECD了
        然后继续 (1)中的步骤,一直到前继节点集合中的元素是所有节点就好了。则表示为 (AE)† = ACDEI。那(AE)的闭包就是ACEDI

接下来就是候选键怎么求?

看题:

例1:R<U,F>,U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求候选码。

利用闭包来求解
首先先要讲几个规则
在关系式中 F 随便一个关系 例如 AB->C 中我们把 讲出现在 -> 左边的节点叫做 左节点。同样的,在右边的节点我们叫做右节点。
1. 只在左边的出现的节点一定存在于中候选键。(也就是候选键的一个一部分或者全部)
2. 只在右边出现的节点一定不是候选键。(啥都不是,它只能被候选键推导出来 。是个铁废物)
3. 两边都没有出现的节点,一定存在于候选键中。
4. 两边都出现的节点呢?是不是候选键呢?有待观察。(解决方法就是让这些元素分别与已经确定的候选中的元素结合,利用闭包推导,看能不能推导出所有的元素。)
下面就来解答:

1: 在题中先在到只在左边出现的元素     就是BD
2: BD 肯定是在候选键中,那它是不是候选键呢?我们利用闭包来检查一下,(BD)† = BD
现在BD推不出全部的元素
3:现在在继续看,G ,只出现在右边,那它肯定不是候选键
4: 现在找在左右两边都出现的元素(本题中就是ACE,) 让他们分别和  BD 结合,看能不能推导出所有的元素。
- 开始检查:
- ABD, 利用闭包检查,(ABD)† = ABCDEG
- CBD, 利用闭包检查 ,(CBD)† = ABCDEG
- BDE, 利用闭包检查, (BDE)† = ABCDEG
则这个题中的三个候选键就是 ABD,CBD,BDE。

OKOK。

这里要感谢这个文章、写的很好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值