第一范式【1NF】
第一范式是最基本的范式,符合数据表的原子性,简单来说,第一范式就是每一个属性都不可再分
-
表中的同一列的类型相同
-
一个列名只能对应到一列
-
并且每一列都不可分
-
行的上下关系互不影响
说明:这个很好理解,就是属性不能再分
第二范式【2NF】
第二范式是在第一范式的基础之上消除了非主属性对主属性的部分函数依赖
可以理解为第二范式意味着表中的非主属性必须完全依赖于主属性
完全依赖:不能够存在仅依赖于候选码一部分的属性
说明:举个列子吧,对于学生基本信息表(学号,身份证号,姓名)中,学号取值是唯一的。由于(学号,身份证号)–>(姓名)
(学号)–>(姓名),(身份证号)–>(姓名),所以姓名部分依赖于主属性(学号,身份证号)
当然如果一个表只有一个主属性且符合第一范式,那么它一定符合第二范式
判断一个关系是否属于第二范式:
- 找出数据表中的所有的候选键;
- 找出所有的主属性与非主属性;
- 判断所有的非主属性对候选键的部分函数依赖。
如果不满足就拆分表!
第三范式【3NF】
第三范式就是指表中的所有数据元素不但要能唯一地被主关键字所标识,而且他们之间还必须相互独立,不存在其他函数关系
其实就是说,在2NF的基础上消除传递函数依赖
传递函数依赖:存在“A–>B–>C”的决定关系,则C传递依赖于A
符合第三范式的数据表,消除了数据冗余,更新异常,插入异常和删除异常。
BCNF
消除主属性对主键的部分与传递依赖