【学习笔记】三大范式
为什么要数据规范化?
-
信息重复
-
更新、插入、删除异常
三大范式
参考博客:
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。
原子性:保证每一列不可再分
图中存在可在分的项如学校信息和家庭信息,可以分成如下
现在表中的每一项都不可再分了,故满足第一范式
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关
前提:必须满足第一范式
每张表只描述一件事情
该表中是订单号和产品号联合组成主键,但是订单金额和订单金额与产品号无关,只与订单号有关,所以该表不满足第二范式。
需要调整如下图,才能满足第二范式
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
前提:需要满足第一范式和第二范式
该表中,班主任姓名与主键直接相关,班主任性别和班主任年龄和班主任姓名直接相关,与主键间接相关,所以不满足第三范式。
需要修改如下图:
三大范式是用来规范数据库的设计
但是所有的数据库都要满足规范去设计吗?
阿里的规定:关联查询不得超过三张表
-
考虑商业化需求和目标,数据库的性能更加重要
-
在规范性能的问题时,需要适当考虑规范性
-
故意给某些表增加一些冗余的字段(使多表查询变为单表查询)
-