数据库三大范式总结

1. 第一范式(1NF)

  在关系型数据库设计中,第一范式是最基本的要求,不满足第一范式的数据库不能叫做关系型数据库。第一范式要求字段不可再分确保字段的原子性,例如下面的这张表就不符合第一范式:

学校编号 学校信息
001 x大学   位于xx市 属于xxx类学校    
002 y大学   位于yy市 属于yyy类学校    

  很明显,学校信息可以继续拆分:

学校编号 学校名 学习位置 学校类型
001 x xx xxx
002 y yy yyy

 

2. 第二范式(2NF)

  第二范式在满足第一范式的基础上规定,数据库表中的所有实例都可以被唯一地区分,不能出现两个相同的实例,所以数据表必须添加主键作为实例的唯一标识。

  同时第二范式要求表中的非主属性完全依赖于主属性,也就是说表里的所有非主属性都和主属性相关。例如下面这张表就不满足第二范式,它描述了学院和学生两方面的信息

学号 姓名 性别 所在学院 所在学院编号 学院人数
001 张三 软件工程 020 10

  这种情况下应该拆成两张表

  学生表

学号 姓名 性别 所在学院
001 020

  学院表

学院编号 学院名 学院人数
020 软件工程 10

 

3. 第三范式(3NF)

  第三范式在第二范式的基础上,要求去除非主属性的传递函数依赖,也就是说所有的非主属性都和主属性直接相关,而不是间接相关,例如下面这张表

学号 姓名 联系人 联系人联系方式
001 张三 李四 130xxxxxxx

 

  这张表里,学号和联系人直接相关,联系人传递方式和联系人直接相关,所以这三者就存在传递函数依赖,不满足第三范式。为了满足第三范式,也要将它分成两张表

    学生表

学号 姓名 联系人编号
001 张三 002

  联系人表

联系人编号 联系人姓名 联系人电话
002 李四 130xxxxxxxx

    

总结:

第一范式:确保字段的原子性

第二范式:表里记录可被唯一标识;非主属性完全依赖于主关键字

第三范式:非主属性之间不能相互依赖。