数据库有关分解的5种算法实例分析学习(持续更新)

小声bb:学完数据库关系数据理论,对里面的几个算法有点懵逼和混乱,网上找了一些资料给的都是一些算法看的头大,在我看来还是看实例更容易学习+记忆一点。

为了便于理解,我的分析可能跟书上的说法不一样,因为我觉得那些有点不好理解(*/ω\*),所以简化成了自己的语言。

本文同样可供考试复习用(比如本菜鸡,里面的解答基本都是按照老师或者书上给的模板进行的,如果对你有帮助就点个赞吧XDDDD

本文前半部分为分析,后半部分为纯答案部分(规范的形式写出)

戳我直达纯答案无分析部分

1.求元素的闭包

2.验证分解是否具有无损连接性

3.转换为3NF的保持函数依赖的分解


1.求元素的闭包

问题:已知关系模式R<U,F>,U={A,B,C,D,E},F={AB->C,B->D,C->E,EC->B,AC->B}。求(AB)+F

分析:找闭包实际上就是找能由这些元素推出什么来。比如求AB的闭包,实际上就是求由A、B、AB能推出什么来。

1.首先一个元素的闭包肯定有它本身,因为肯定有AB->AB,则(AB)+F={AB},现在闭包里面的元素有A、B

2.然后根据题上的B->D,所以能推出D,则(AB)+F={ABD},现在闭包里面的元素有A、B、D

3.然后根据题上给的AB->C,所以闭包中多了一个C,即(AB)+F={ABCD},现在闭包里面的元素有A、B、C、D

4.接着根据题上有C->E,则有(AB)+F={ABCDE},现在闭包里面的元素有A、B、C、D、E

5.至此AB的闭包已经包含了关系中的所有元素。即(AB)+F={ABCDE}(结论)

2.验证分解是否具有无损连接性

问题:设有关系模式R(B,O,I,S,Q,D),F={S->D,I->B,IS->Q,B->O},若把R分解为SD,IB,ISQ,BO这个分解具有无损连接性吗?

分析:ρ{ R1{SD},R2{IB},R3{ISQ},R4{BO} }是R的一个分解,F={S->D,I->B,IS->Q,B->O},不妨设F是一个极小依赖集。

以下为了理解学习我会分解成几步进行,实际解答考试时直接一个表就可以了

1:建立一个表格,横坐标i是R的五个属性,纵坐标j 是几种分解

BOISQD
{SD}
{IB}
{ISQ}
{BO}

2:将每行中分解中有的元素标上ai,没有的要么不标,要么标上bi(这种方式就将bi改成ai),此处我采取不做处理

BOISQD
{SD}a4a6
{IB}a1a3
{ISQ}a3a4a5
{BO}a1a2

3:关键的一步:对每一个分解,一行一行的找,只要这行已经有了这个分解的前面的元素,那么就可以在这行的 这个分解的 其余元素的地方填上ai,相当于第一个元素推出这个分解的后面的元素(比如分解IS->Q分解有IS就有Q)。当然分解所在的那行可以不看

(为方便学习,以下红色部分为新加的)

例如:对于分解{SD},第一行是此分解本行,不用看

BOISQD
{SD}a4a6

看第二行,此行中只有B和I元素,没有S元素,因此不写任何东西,跳过

BOISQD
{IB}a1a3

看第三行,此行中有I,S和Q元素,有S元素,因此在D元素的位置写上a6

BOISQD
{ISQ}a3a4a5a6

看第四行,此行中有B和O元素,没有S元素,因此不写任何东西,跳过

BOISQD
{BO}a1a2

4:用这种方法将剩下的三个分解(每个分解都是从第一行开始找)也处理了,后面的分解每次处理都是在前面已经有了的基础上(而不是最开始的那张表)进行。

第一遍当所有的分解都进行完了时,如果这张表有一行所有的元素都写满了ai则停止;如果没有则进行第二遍从头开始处理,当然是在第一遍的基础上进行。

如果始终都不能有一行满则这种分解没有无损连接性(结论),如果有一行满了则这种分解具有无损连接性(结论)

最终的处理结果为下表

BOISQD
{SD}a4a6
{IB}a1a2a3
{ISQ}a1a2a3a4a5a6
{BO}a1a2

{ISQ}分解这一行所有元素都满了,因此该分解(即ρ{R1{SD},R2{IB},R3{ISQ},R4{BO} })具有无损连接性。

3.转换为3NF的保持函数依赖的分解

问题:已知R(U,F),U={C,H,R,S,G,T},Fm={C->T,CS->G,HT->R,HR->C,HS->R},求R的一个具有保持函数依赖性的3NF的分解。

分析:(1)对R<U,F>中的函数依赖集F进行“极小化处理”,处理后得到的依赖集仍记为F。此处给出的就是最小依赖集,所以不做处理。(不知道什么是最小依赖集和怎么求的可以点->点我查看“如何求最小依赖集”

(2)找出所有U中有但F中没有出现的属性,记做U0,把这样的属性构成一个关系模式R0<U0,F0>。然后把这些属性从U中去掉,剩余的属性仍记为U。

(3)如果有X->A∈F,且XA=U,则ρ={R},算法终止。(但这个算法里面没有循环)

(4)否则,对F按具有相同左部的原则分组(假定分为k组),每一组函数依赖所涉及的全部属性形成一个属性集Ui。若Ui⊆Uj(i≠j)就去掉Ui。由于经历了步骤(2),故U=Ui(从i=1到k)(打不出来那个符号),于是ρ={R1<U1,F1>,…,Rk<Uk,Fk>}∪R0<U0,F0>构成R<U,F>的一个保持函数依赖的分解,并且每个 Ri<Ui,Fi>均属3NF。这里Fi是F在Ui上的投影,并且Fi不一定与F`i相等,但F`i一定被Fi所包含,因此分解ρ保持函数依赖是显然的。(如果看不明白可以看实例)


1.求元素的闭包

问题:已知关系模式R<U,F>,U={A,B,C,D,E},F={AB->C,B->D,C->E,EC->B,AC->B}。求(AB)+F

答:设X(0)=AB,计算X(1):逐一扫描F集合中各个函数依赖,找出左部为A、B或AB的函数依赖,得到两个:AB->C,B->D。

于是X(1)AB∪CD=ABCD。

因为X(0)≠X(1),所以再找出左部为ABCD子集的那些函数依赖,又得到C->E,AC->B,于是X(2)=X(1)∪BE=ABCDE。

因为X(2)已等于全部属性集合,所以(AB)+F=ABCDE。

2.验证分解是否具有无损连接性

问题:设有关系模式R(B,O,I,S,Q,D),F={S->D,I->B,IS->Q,B->O},若把R分解为SD,IB,ISQ,BO这个分解具有无损连接性吗?

答:ρ{ R1{SD},R2{IB},R3{ISQ},R4{BO} }是R的一个分解,F={S->D,I->B,IS->Q,B->O},不妨设F是一个极小依赖集。建立表如下:

BOISQD
{SD}a4a6
{IB}a1a2a3
{ISQ}a1a2a3a4a5a6
{BO}a1a2

{ISQ}分解这一行所有元素都满了,因此该分解具有无损连接性。

3.转换为3NF的保持函数依赖的分解

问题:已知R(U,F),U={C,H,R,S,G,T},Fm={C->T,CS->G,HT->R,HR->C,HS->R},求R的一个具有保持函数依赖性的3NF的分解。

答:

(1)找F的最小函数依赖集,题中已给出。

(2)没有属于U但F中没出现的,则U0={},此时U不变。

(3)有C->T(任意取的,也可以取其他不满足XA=U的),CT≠U。

(4)对F按左边相同原则分组。令有R1={U1,F1},…R5={U5,F5},U1=CT,U2=CSG,U3=HTR,U4=HRC,U5=HSR。(F中有几个依赖就写几个U),Ui与Uj(i=1…5,j=1…5)之间不存在子集情况,则ρ={F1,F2…F5}(U0为空,否则ρ为U0∪它们)。ρ为保持函数依赖的3NF的分解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值