写在前面
数据库范式一直是一种很难理解的,各种翻译版本讲解的方式都比较难理解,在这重新梳理下自己的理解范式
一、范式
NF (normal from) 规范的形式
二、1NF
要求我们表中的每个字段都必须是最基本的属性,即原子属性(不可再拆分)。
例如:学生表中,有学号,姓名,联系方式,这个联系方式就不满足1NF,因为联系方式还可以拆分为手机号,微信号,QQ号等。
三、2NF(重点是完全依赖于候选键)
要求表中所有的非主键属性都依赖于完全的候选键(非候选键的部分、多个候选键)。如果候选键只有一个属性,那么只需要考虑其他属性都依赖于主键就好了。
例如:学生选课表,主键是学号和课程号,非主键属性是选课的时间,系统确认的时间,所选课程的名字,课程名字只依赖于候选键中的课程ID,而不是整个候选键。
四、3NF
满足第二范式的情况下,要求所有非键属性不应该依赖于其他非候选键。避免发生传递依赖。
名词解释:
- 传递依赖:属性可以通过一个中间属性得出其他属性。
- 例如:学生表,主键是学号,非主键属性为学生姓名、所在院系Id,所在院系名。院系名称依赖于院系ID,在这个表中传递依赖于学生ID。
五、BCNF
要求所有属性(包含候选键中的属性)不能依赖其他非候选键,不能存在传递依赖于主键。
名词解释:
- 首先跟3NF的区别,3NF是非键属性,BCNF是所有属性。
- 什么是键属性,主键可以由多个属性组成,其中的属性叫做键属性,其他的属性叫做非键属性。
3.例如:学生专业学分表,其中包含字段:学生ID,专业,导师,学生专业学分,这其中学生ID和专业是联合主键 。由于一个老师执教一个专业,所以,主键属性中专业依赖于导师属性,传递依赖于候选键。 - 如果候选键是单属性,怎在3NF的基础上,一定满足BCNF。
六、4NF
不存在多值依赖。
名词解释:
- 多值,关系中存在多个属性,且这几个属性不能直接确定其他值
- 必须通过其中几个一起确定一个值
最后
如果还是不理解,可以看这个博客