第一范式,第二范式,第三范式
Level 1
定义
范式(Normal Form,NF),数据库满足的约束条件,并按照等级可以分为第一范式(1NF),第二范式(2NF)和第三范式(NF)(约束程度递增)。
范式化优势:
-
范式化的更新操作通常比反范式化要快。
-
当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据。
-
范式化的表通常更小,可以更好地存放在内存中,所以执行操作会更快。
-
很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。
反范式化优势:
-
可以利用反范式避免表关联,减小数据库开销。
Level 2
第一范式:
简要来说,第一范式规定所有域都应该是原子性的。即,
数据库表中的每一列都是不可分割的
;不应该是集合,数组等非原子数据项。
第二范式:
在满足第一范式的基础上,第二范式规定非码属性必须完全依赖于主码。即,表中的字段必须完全依赖(
而非部分依赖
)与主码。
第三范式:
在满足第二范式的基础上,第三范式规定,任何非主属性不依赖于其它非主属性。即,表中字段不能存在
传递依赖
。
Level 3
错误示例
绿色背底:该表主键。
黄色背底:表中的正常字段。
肉色背底:表中不符合范式的字段。
第一范式
如图,张三拥有两个电话号码,却记录在了同一个字段中,违反了第一范式中字段
不可分割
的规则。
第二范式
如图,主键(复合)为姓名+课程,出勤率和分数由主键唯一确定(完全依赖);但性别字段却只依赖于姓名,与课程并无依赖关系(
部分依赖
)。违反了第二范式中,字段不能部分依赖的规定。
第三范式
如图,主键为姓名;学校,性别,学院为正常字段,依赖于主键;但学校所在地却依赖于学校,由学校唯一确定(
传递依赖
)。违反了第三范式中,表中属性不能依赖于非主属性的规定。