数据库——关系数据库的规范化:求候选码【超详细求解过程】

设关系模式R,F是R的函数依赖集,求候选码:

求解步骤:

第一步:列出L、R、N、LR属性包含的元素

  • (在此之前可以先去求L属性的闭包,如果其包含R中所有元素,那么L属性对应的元素就是唯一候选码)

第二步:设X、Y——X代表L与N类属性,Y代表LR类属性

第三步:求X的闭包

第四步:

(1)如果X的闭包包含R的全部属性元素,X即为R的唯一候选码,结束。

(2)[若X+不全包含R的元素]

         第五步:从Y中依次取出一个元素,设该元素为A,求(XA)+,

        若取出元素和X组合求得的闭包包含关系模式中的所有属性,直到试完Y中全部的元素。

                [若Y中的元素取出与X组合均包含R全部属性,此时所有候选码被找出。]

                [若Y中还有元素与X组合求得的闭包不包含全部元素,则从这些元素中依次取出两                  个开始继续与X组合]

涉及知识点——属性分类

L类属性:关系模式中的属性,只出现在函数依赖集左边的属性

R类属性:关系模式中的属性,只出现在函数依赖集右边的属性

N类属性:关系模式中的属性,没有出现在函数依赖集里的属性

LR类属性:关系模式中的属性,出现在函数依赖集左、右两边的属性

例题1:

设有关系模式R(A, B, C),  其中:F={B→C ,AC →B }   求出R的所有候选键。

第一步——列属性:

L={A}

R={Ø}

N={Ø}

LR={BC}

L+=A+={A},不是唯一候选码

第二步——设XY:

X=(L∪N)=A

Y=LR=BC

第三步——求X+:

X+=A+={A}

第四步——从Y依次取出元素与X组合求闭包:

从Y中取出B与X组合,(AB)+={ABC},包含R中全部属性,AB为R的候选键

从Y中取出C与X组合,(AC)+={ACB},包含R中全部属性,AC为R是候选键

因为Y中B、C均和A组合为候选键,所以无需再进行下一步取两个元素BC与A组合

所以,R的候选键有AB、AC

例题2:

设有关系模式R(A,B,C,D,E),其中:F={B→CD,DE→A,C→E,A→B} 求出R的所有候选键。

第一步——列属性:

L={Ø}

R={Ø}

N={Ø}

LR={ABCDE}

第二步——设XY:

X=(L∪N)=Ø

Y=LR=ABCDE

第三步——求X+:

X+={Ø}

第四步——从Y依次取出元素与X组合求闭包:

从Y中取出A与X组合,XA+=(A)+={ABCDE},包含R中全部属性,A为R的候选键

从Y中取出B与X组合,XB+=(B)+={BCDEA},包含R中全部属性,B为R的候选键

从Y中取出C与X组合,XC+=(C)+={CE},没有包含R中全部属性,C不是R的候选键

从Y中取出D与X组合,XD+=(D)+={D},没有包含R中全部属性,D不是R的候选键

从Y中取出E与X组合,XE+=(E)+={E},没有包含R中全部属性,E不是R的候选键

这里单个元素的组合均求完闭包,只有A、B与X组合求得的闭包包含R的全部属性,所以还需要从剩下的CDE中依次取出两个和X组合求闭包:

XCD+=(CD)+={CDEAB},包含R中全部属性,CD为R的候选键

XCE+=(CE)+={CE},没有包含R中全部属性,CE不是R的候选键

XDE+=(DE)+={DEABC},包含R中全部属性,DE为R的候选键

所以,R的候选键有A、B、CD和DE

  • 21
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我分别介绍一下三种常见的候选码求解算法,并给出每种方法的具体举例。 1. 二分查找算法 二分查找算法是一种时间复杂度为 O(log n) 的查找算法,适用于有序的序列。其基本思想是将序列按照一定的顺序排序,然后将序列分为左右两个子序列,每次查找时都将目标值与中间位置的值进行比较,逐步缩小查找范围,直到找到目标值为止。 举例:假设有一个包含 10 个数字的有序序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们要查找数字 7 的位置。首先将序列分为左右两个子序列 [1, 2, 3, 4, 5] 和 [6, 7, 8, 9, 10],然后将目标值 7 与中间位置的值 5 进行比较,发现目标值大于中间值,因此可以将查找范围缩小到右侧子序列 [6, 7, 8, 9, 10],继续进行二分查找,直到找到目标值 7。 2. 哈希算法 哈希算法是一种将任意长度的消息压缩到固定长度的摘要的算法。在候选码求解中,哈希算法可以将候选码列表转换为哈希表,然后对目标码进行哈希运算,快速定位到可能包含正确码的位置,并逐步判断候选码是否符合要,直到找到正确码为止。 举例:假设有一个包含 100 个候选码的列表,我们要查找正确码 1234,可以使用哈希算法将候选码列表转换为哈希表,然后对正确码进行哈希运算,得到其对应的哈希值。根据哈希值可以快速定位到可能包含正确码的位置,然后逐个比较候选码是否符合要,直到找到正确码为止。 3. 模式匹配算法 模式匹配算法是一种用于在文本中查找模式的算法。在候选码求解中,可以将目标码与候选码逐个字符进行比较,通过对候选码进行逐步的模式匹配,逐步排除不符合要候选码,直到找到正确码为止。 举例:假设有一个包含 100 个候选码的列表,我们要查找正确码 1234,可以使用模式匹配算法将正确码与候选码逐个字符进行比较。首先比较第一个字符,如果不匹配则排除掉所有以该字符开头的候选码;然后比较第二个字符,以此类推,直到找到正确码为止。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值