很多人都陷入先入为主的思维,因为一开始教科书上给的图片就是三范式包含在二范式里面,又说是二范式去除了传递依赖就是三范式,所以结论显而易见巴拉巴拉。
但是三范式的定义是 R如果是一范式,那么R中不存在这样的码X,属性组Y以及非主属性Z(Z不属于Y)使得X->Y,Y->Z成立,Y不依赖于Z,则称R属于三范式
整个定义里面并没有关键的二范式中提到的 部分依赖问题,那到底怎么证明呢?
显然 我们假设 R是三范式但是不是二范式来反证:
如果R是三范式,既满足定义,但是不满足二范式,我们设R中属性为为 primarykey1,primarykey2,normal,其中依赖关系只有primarykey1->normal,那么主码应该是(key1,key2),既有(key1,key2)->key1,key1->normal,(key1,key2)->normal,我想到这里聪明的你已经看出来哪里不对了,因为这与定义中的X->Y,Y->Z 且 Y不依赖于Z 和 Z不属于Y都不冲突,即R中存在这样的关系,这与R是三范式矛盾,因此得出R如果是三范式,一定是二范式的结论,证明完毕。
由此可以得出,如果在不考虑平凡依赖关系的情况下,非主属性不存在间接依赖(传递依赖),就一定不存在部分依赖。
当然了,主属性依然可能存在部分依赖的问题,不过那就是BCNF范式的事情了。