1-3NF,BCNF,最小依赖集,模式分解,判断是否为无损分解

1NF----表中每一列都不能再分解了(stomic)

2NF----满足1NF,并且非主键属性不能不分依赖于主键

e.g A B C D E  其中A和B为主键,如果A能单独决定C的属性,那么就不符合2NF.

BTW:如果主键只有一个,那肯定2nf

3NF----满足2NF,人话就是 不存在这个关系:关键字段------>非关键字段x-------->非关键字段y

就是说所有的非主键属性只能由主键来决定

BCNF-----满足3NF,人话:AC--->J   AC必须包含候选键,也就是关系模式的左部必须包含候选键

最小依赖集:

简单来说就是求闭包,找冗余https://blog.csdn.net/wonz5130/article/details/80465245观摩了这篇文章

先右边单一化

然后左边单一化

最后去冗余

 

关系模式分解为3NF:

https://blog.csdn.net/Wonz5130/article/details/80466282还是那位老哥

关系模式分解为BCNF:

这个有几个步骤:

1. 先求候选键

2.如果F中不满足BCNF就分解(左部包含候选键)

U=(A,B,C,D,E,)   F={A->B, AC->D, DB->E}

在这个例子中,F是最小依赖集(先求最小依赖集,后面好算)

这里F的候选键为AC

下一步之前先上个图 

这个图里重点看最后一句 replacer Ri by ....

E.G U=(A,B,C,D,E,)   F={A->B, AC->D, DB->E}

候选键AC

第一个关系模式显然不符合BCNF(左部没候选键)

所以要把它分解为R1,R2。根据上图X->Y对应A->B,所以用F-B 和 AUB作为R1,R2

R1={(ACDE),(AC->D, AD->E)}这个AD->E怎么来的呢,就是通过F中的关系转换的出来(因为要除去B)

R2={(AB),(A->B)}

因为R1,R2的最小依赖集就是自己本身,而且R1候选键依然为AC,R2就剩一个关系模式自然满足BCNF

R1不满足BCNF再次进行分解(先求最小依赖集和新的候选键,在这例子中不变)

因为R1只有两个关系模式,所以直接分解为R12,R11

R11={(ACD),(AC->D)}

R12={(ADE),(AD->E)}

 

判断是否为无损:

还是那位老哥https://blog.csdn.net/Wonz5130/article/details/80502746

因为我看不太懂所以附上参考材料https://wenku.baidu.com/view/b0f18770fab069dc5122012c.html

简单来说,先看第一篇文章,知道怎样建矩阵,然后判断方法就根据第二篇,比如A->D, 如果有两行在A列上相等而在D列上不相等,1.如果D列上有a,则把对应的两行都改为a       

        2.没有a就用D列上的b代替

BC->D这些也一样,找到BC列上相等的两行并且对应到D中,完美

最后只要看看矩阵中有没有哪一行全都是a,有就是无损了

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值