数据库三大范式

第一范式(1NF):符合1NF的关系中的每个属性都不可再分。

数据库三大范式
这张表中,进货属性,销售属性就都不是原子的,应该再拆分。如下:
数据库三大范式

第二范式(2NF):2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。

码就是主键的意思,非主属性就是除去码之外的属性。这种情况一般来说,码中两个或两个以上的属性,然后存在一些属性只是依赖码的部分属性,而不不整个码的属性。例如有一张如下:
数据库三大范式
这里,码为(学号,课名),分数这个属性满足2NF,因为其完全依赖于码(学号,课名),但是姓名,系名,系主任这些就不满足了,因为这些属性,只是依赖于学号这个主属性,所以说是部分依赖码。依赖关系如下:
数据库三大范式
所以可以把关系拆开:
数据库三大范式
所以可以拆为两个表,上面为一个,下面为一个,如下:
数据库三大范式

第三范式(3NF):消除了非主属性对于码的传递函数依赖

对于学生表,主码为学号,主属性为学号,非主属性为姓名、系名和系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。
为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:
选课(学号,课名,分数)
学生(学号,姓名,系名)
系(系名,系主任)
数据库三大范式
完整的表如下:
数据库三大范式

总结

第二范式是看有没有存在属性,只是部分依赖关键字的,第三范式是看有没有属性其实是直接依赖于其他属性的。