参考b站up主: 早上好我是DJ同学 的视频总结加个人笔记
求闭包
一步一步求即可

求候选键
首先求得是L∪N是否可以表示R 。不行的话就从LR中选
A已经被选择了而且已经可以构成R,在后面选择的时候就不用选

求最小函数依赖集

右部最小化,把多个属性各自分开
若删除依赖x,则x在F中先不看, B->D先不看
ADG->B先不看,通过闭包可以得到全集U(包含X->Y的Y,即在题中是B),因此要删除
ADG->B删除后就不能再使用了,F中消失了
ADG->C先不看,通过闭包可以得到全集U(包含X(ADG)->Y(C)的Y,即在题中是C),因此要删除
第三步(左边是单属性就不用处理了)左部最小化
删除D对于B->E没有影响,回看最开始的步骤图片

BD->E更换为B->D


虽然第三步完成了,但是在第三步中有删减更改,需要重新过一次第二步(第三步也是需要重新再处理的)

完成完第三步若没有更改才停止
流程图

求投影
这里的R指的是要求投影的R

这里的R是ACD

在ACD中取三个可以忽略,因为在题中没有依赖左边是三个的

找非(平凡trivial)函数(不是一眼看出来的,例如A^+=A这种就是trivial平凡)
D^+=DB,可以得到D->B

可以从AD->BC分解AD->B,AD->C,因为FD(函数依赖)中存在B,在投影中没有B这个属性的,所以用不了,去掉,最后得到的只有一个
多一个例题
因为在题中没有依赖左边是三个的



判断是否保持函数依赖 preserve all functional dependencies


求分解投影
这里先求AB投影

B->AC忽略C在AB投影中,因为AB投影中没有C这个属性

求AC的投影

A->C在R3中没有用,因为R3是AD,因此为空集

第二步已经成立,无需做第三步

另一题

C在步骤三中是没有成存在的,因为F1∪F2∪F3中没有C->D,所以需要单独算C的闭包。因为C可以推出D,所以成立

分解3NF

前面用到的求最小函数依赖的方法
注意CDE->G写的是CDE的闭包,不是A的
(左边是单属性就不用处理了)左部最小化

下一步是合并

然后是求候选键,因为下面的R3是R2的一个子集,所以可以删掉R3
最终结果

根据算法第三步可知,若没有候选键在模式中,需要补上候选键(至少一个),下面是例子

分解BCNF

先求候选键,R中候选键是A,找到左边不包含超键的属性C->D,C不是超键,分解R

分解方法:X->Y在这里是C->D,因为A是候选键也是超键,所以前面的FD就先忽略,到C->D,又因为C不是超键,所以要将Ri分解,这里的Ri是R,因为这是第一次迭代,所以i=0。把Ri分解成XY和Ri减去Y两个模式,在这里是X为C,Y为D,XY为CD,这里可以写成R1。Ri-Y就是集合的减法Ri为ABCDFEG减去Y为D,所以R2可以写成ABCEFG,后面的步骤同理
![]()
防止遗漏,求F的闭包,在题中是A,C,E的闭包,A的闭包是U全集,C的闭包是CDEFG,E的闭包是EFG,这里是为F2的构造做准备,所以后面的R2可以到C->EFG
不用写C,因为这是平凡依赖


需要再次求R2的候选键,R2中C和E不是超键
为了不漏,需要求F2的闭包
再次求R3的候选键是C,R3(CEFG)可以得到两个依赖
绿色标记的就是分解好的bcnf

如有遗漏和错误,欢迎一起探讨!!!
自己作业的例题,可能会有错误









文章介绍了如何通过逐步求解闭包、确定函数依赖集、处理候选键和分解投影来优化数据库关系模型。内容包括求解最小函数依赖、左部和右部最小化,以及3NF和BCNF分解的步骤和示例。





3415

被折叠的 条评论
为什么被折叠?



