最小函数依赖集的去掉:这里能推出B,去掉
![](https://img-blog.csdnimg.cn/img_convert/21e25c06854f7eda31a8a7bf498f1897.jpeg)
红字这句话对第2步来说就是不看它自己的推出,其能推出它自己原来的推出,就去掉
对第3步来说,就是遮住自己,其他的能推出自己,就替换掉自己
![](https://img-blog.csdnimg.cn/img_convert/2be522eb7121e6c418c356afc79e7c2a.jpeg)
对于1:n,将它俩关系即雇佣的所有属性加到n所在表中,并把1所在表的主键也加到n所在表中
对于n:m,只需要将n的主键和m的主键都放到它俩之间的关系即生产,然后也加上生产关系上的所有属性,形成一个新的生产表
![](https://img-blog.csdnimg.cn/img_convert/0b480cda5b1c25b9aee5d7e5c8e4d97d.jpeg)
通过其他集合,看看能不能推出E来,首先推出自己来
这个是最小函数依赖
![](https://img-blog.csdnimg.cn/img_convert/8df70add0fec9e8b4f1653abdb3fb399.jpeg)
只要没有非主属性就是3NF,在此基础上,所有的决定因素都是码,那就是BCNF。
这里是全码,就是3NF,但不一定是BCNF
左边都是单个的,不可能再拆,则无部分依赖,比为2NF
![](https://img-blog.csdnimg.cn/img_convert/86e9395b942e08d8e343bfbb3d67e52f.jpeg)
还有下面这种左边是全为候选键的,必为BCNF
![](https://img-blog.csdnimg.cn/img_convert/ad68f6cb1c671b3af9f11e1581930e28.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/075d3693eb0e81fc342b8ce7485cd89b.jpeg)
2NF只看针对非主属性的左侧,而BCNF要看所有依赖关系的左侧。 BCNF的条件是每一个决定因素(即每一个依赖关系的左侧)都包含码。
非主属性的左侧的推断条件中是否出现了候选码,也就是
题目中D和E的左侧是否出现了AB或BC(AB或BC必须一起打包出现,不
能只出现单个的A,B之类)。
![](https://img-blog.csdnimg.cn/img_convert/4399df628b1814151a42cdde624d39dc.png)