数据库三大范式学习理解
2017-08-20 13:47
239 查看
范式,一般指的是关系型数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可循的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常我们所用到的就只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。
第一范式(无重复的列)
定义:数据库表中的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性。
也就是说,第一范式强调的是原子性,即列不能再分成其他几列。
例如:班级:软件工程1403班,应该分为两个字段,一个专业(软件工程),一个班级(1403班)才满足第一范式
不满足第一范式:
学号 姓名
班级
0006 小吕
软件工程1403班
应该改为:
学号 姓名
专业 班级
0006 小吕
软件工程 1403班
第二范式(属性完全依赖于主键)
定义:在满足第一范式的前提下,当存在多个主键的时候,才会发生不满足第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于一个主键,这就是不符合第二范式。
也就是说,任意一个字段都只依赖于表中的同一个字段,该字段为该表中主键。
例如:学生证号(主键),学生证名称,学生证办理时间,借书证号(主键),借书证名称,借书证办理时间,学生证名称和学生证办理时间依赖于主键学生证号,而借书证名称和借书证办理时间依赖于主键借书证号。
应该改为:
【学生证表】
学生证号 学生证名称
学生证办理时间
** **
**
【借书证表】
借书证号 借书证名称
借书证办理时间
** **
**
第三范式(属性不能传递依赖于主属性)
定义:在满足第二范式的前提下,如果某一属性依赖于其他非主键属性,而其他非主键属性有依赖于主键,那么这个属性就是间接依赖于主键,这就被称作依赖于主属性。
也就是说,一张表最多只存在2层同类型信息。
例如:爸爸资料表
爸爸 儿子
女儿 女儿的小熊
女儿的海绵宝宝
** **
** **
**
应该改为:
【爸爸信息表】
爸爸 儿子
女儿
** **
**
【女儿信息表】
女儿 女儿的小熊
女儿的海绵宝宝
** **
**
第一范式(无重复的列)
定义:数据库表中的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性。
也就是说,第一范式强调的是原子性,即列不能再分成其他几列。
例如:班级:软件工程1403班,应该分为两个字段,一个专业(软件工程),一个班级(1403班)才满足第一范式
不满足第一范式:
学号 姓名
班级
0006 小吕
软件工程1403班
应该改为:
学号 姓名
专业 班级
0006 小吕
软件工程 1403班
第二范式(属性完全依赖于主键)
定义:在满足第一范式的前提下,当存在多个主键的时候,才会发生不满足第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于一个主键,这就是不符合第二范式。
也就是说,任意一个字段都只依赖于表中的同一个字段,该字段为该表中主键。
例如:学生证号(主键),学生证名称,学生证办理时间,借书证号(主键),借书证名称,借书证办理时间,学生证名称和学生证办理时间依赖于主键学生证号,而借书证名称和借书证办理时间依赖于主键借书证号。
应该改为:
【学生证表】
学生证号 学生证名称
学生证办理时间
** **
**
【借书证表】
借书证号 借书证名称
借书证办理时间
** **
**
第三范式(属性不能传递依赖于主属性)
定义:在满足第二范式的前提下,如果某一属性依赖于其他非主键属性,而其他非主键属性有依赖于主键,那么这个属性就是间接依赖于主键,这就被称作依赖于主属性。
也就是说,一张表最多只存在2层同类型信息。
例如:爸爸资料表
爸爸 儿子
女儿 女儿的小熊
女儿的海绵宝宝
** **
** **
**
应该改为:
【爸爸信息表】
爸爸 儿子
女儿
** **
**
【女儿信息表】
女儿 女儿的小熊
女儿的海绵宝宝
** **
**