流程
①首先先求候选键(候选键中的属性都为主属性,不在候选键中的属性都为非主属性,主键是候选键中挑一个),候选键的简易求法:在依赖集中右边的属性全部删除,然后从依赖集第一项开始,一个个加入左边的属性,假如可以全部推出,那么它就是一个候选键
②判断非主属性是否部分依赖(部份依赖即是有AB->C,B->C且AB为候选键;那么C就是部分依赖于候选键)于候选键,是的话不是2NF,否的话就是指完全依赖于候选键,最低是2NF
③判断非主属性是否传递依赖(传递依赖即是有A->B,B->C且A为候选键;那么C就是传递依赖于候选键)于候选键,是的话不是3NF,否的话最低是3NF
④判断主属性是否部分/传递依赖于候选键,是的话不是BCNF,否的话最低是BCNF,判断BCNF的简易方法:看依赖集F中所有左边项是否都为候选键,是的话是BCNF,反之亦然
例题
已知R={A,B,C,D},F={B->D,D->B,AB->C},求它是1NF还是2NF还是3NF还是BCNF?
答:
1.先求候选键
F中右侧的为D,B,C,那么在R中先删除这三个属性,剩下A。因为A无法直接推出其他所有属性,所以
①从F的第一项开始,加入B,现在为{A,B};由{A,B}可以推出D,{A,B,D}可以推出C,由{A,B}可以推出所有属性,所以{A,B}为候选键;
②从F的第二项开始,加入D,现在为{A,D};由{A,D}可以推出B,{A,D,B}可以推出C,由{A,D}可以推出所有属性,所以{A,D}为候选键;
因此,候选键为{A,B},{A,D};主属性为A,B,D;非主属性为C;
2.判断非主属性是否部份依赖于候选键
由于F中AB->C可知,C是完全依赖于候选键{A,B}的,所以不存在部份依赖,因此至少是2NF
3.判断非主属性是否传递依赖于候选键
由2中可知,C完全依赖于候选键{A,B},所以不存在传递依赖,因此至少是3NF
4.判断主属性是否部分/传递依赖于候选键
依赖集F的左边项分别为B,D,AB。因为B和D不是候选键,只有AB是候选键,所以不是BCNF
因此,本题为3NF。