数据库三范式
- 介绍
- 第一范式:确保每列都是不可拆分的
- 第二范式:在第一范式的基础上,确保非主键列完全依赖于主键,而不是依赖于主键的一部分
- 第三范式:第二范式的基础上,确保非主键列不存在传递依赖
介绍
什么是数据库三范式?它有什么作用?:数据库三范式是关系数据库的设计原则,它帮助我们规划出结构合理、稳定性好的关系型数据库
第一范式:确保每列都是不可拆分的
这个的意思是,每一列都不能再分解成更小的值,比如性别,学号,这种就不能再被分解了。而出生日期的话,还可以再被细分为哪一年,哪一个月,哪一天,这种就是属于列不可被拆分的。
比如上面的这张表,如果你的业务还需要将出生日期给拆分,那么这张表就不符合第一范式
第二范式:在第一范式的基础上,确保非主键列完全依赖于主键,而不是依赖于主键的一部分
这个的意思是非主键的列必须完全依赖于主键,举一个例子
学生表(Students)包含以下字段:
学生ID(StudentID)(主键)
学生姓名(StudentName)
年龄(Age)
所在班级(Class)
上表就完美的符合第二范式,因为通过主键学生的Id,就可以唯一确定学生姓名以及年龄和班级
第三范式:第二范式的基础上,确保非主键列不存在传递依赖
如果一个关系满足第二范式,并且在两个 (或多个) 非主键属性之间不存在函数依赖 (非主键属性之间的函数依赖也称为传递依赖),那么这个关系就满足第三范式。
简单来说,3NF 要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖。
如果不满足第三范式,可能会存在下述问题:
数据冗余
更新异常