数据库三大范式总结
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 |
总结:
第一范式:确保字段的原子性
第二范式:表里记录可被唯一标识;非主属性完全依赖于主关键字
第三范式:非主属性之间不能相互依赖。