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

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 中找 前继节点有没有是 前继节点的子集的。A->D , E->C 就是我们找到的两个关系式,将找到的两个关系中的后继节点(也就是C,D) 并到前继节点集合中去。则
        (2)现在前继节点的集合就是AECD了
        然后继续 (1)中的步骤,一直到前继节点集合中的元素是所有节点就好了。则表示为 (AE)† = ACDEI。那(AE)的闭包就是ACEDI

接下来就可以安安心心的将怎么求了?

看题:

例1:R,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。

参考这个文章、

你可能感兴趣的:(数据库——求候选键的方法)