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。
这里要感谢这个文章、写的很好。