数据库的三大范式

第一范式(1NF):符合1NF的关系中的每个属性都不可再分,1NF是所有关系型数据库的最基本要求。

                           不符合1NF的表结构

 

                              符合1NF的表结构

 

  仅仅只满足第一范式存在的问题:冗余数据过大、插入异常、删除异常、更新异常。

 

                        仅仅符合第一范式的表结构

 

  数据冗余过大:每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次。

  插入异常:假如学校新建了一个系,但是暂时还没有招收任何学生(比如3月份就新建了,但要等到8月份才招生),那么是无法将系名与系主任的数据单独地添加到数据表中去的 。

          表中的所有属性不能为空。

  删除异常:假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)。

  更新异常:假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。

 

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

                    符合第二范式的表结构

 

  第二范式对第一范式的改进:

  数据冗余过大:学生的姓名、系名与系主任,不再像之前一样重复那么多次了。

  更新异常:李小明转系到法律系只需要修改一次李小明对应的系的值即可。

 

  第二范式存在的问题:

  删除异常:删除某个系中所有的学生记录该系的信息仍然全部丢失。

  插入异常:插入一个尚无学生的新系的信息。因为学生表的码是学号,不能为空,所以此操作不被允许。

 

 

  第三范式:3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。

 

  第三范式对第二范式的改进:

  数据冗余过大:数据冗余更加少了  

  插入异常:插入一个尚无学生的新系的信息。因为系表与学生表目前是独立的两张表,所以不影响

  删除异常:删除某个系中所有的学生记录该系的信息不会丢失。

 

  总结:符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF。

 

  参考资料:https://zhuanlan.zhihu.com/p/20028672

 

  

 

 

posted @ 2018-07-30 23:24  韵文  阅读(271)  评论(0编辑  收藏  举报