数据库范式题型:闭包|候选键|最小函数依赖集|投影|判断是否保持依赖|分解3NF|分解BCNF

参考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

 如有遗漏和错误,欢迎一起探讨!!!

自己作业的例题,可能会有错误

  • 41
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值