【学习笔记】三大范式

三大范式

 

为什么要数据规范化?

  • 信息重复

  • 更新、插入、删除异常

 

三大范式

参考博客:关系型数据库设计:三大范式的通俗理解 - 景寓6号 - 博客园 (cnblogs.com)

 

第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

原子性:保证每一列不可再分

img

图中存在可在分的项如学校信息和家庭信息,可以分成如下

img

现在表中的每一项都不可再分了,故满足第一范式

 

第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关

前提:必须满足第一范式

每张表只描述一件事情

img

该表中是订单号和产品号联合组成主键,但是订单金额和订单金额与产品号无关,只与订单号有关,所以该表不满足第二范式。

需要调整如下图,才能满足第二范式

img

img

 

第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

前提:需要满足第一范式和第二范式

img

该表中,班主任姓名与主键直接相关,班主任性别和班主任年龄和班主任姓名直接相关,与主键间接相关,所以不满足第三范式。

需要修改如下图:

image-20221005160121924

 

三大范式是用来规范数据库的设计

 

但是所有的数据库都要满足规范去设计吗?

阿里的规定:关联查询不得超过三张表

规范性和性能 该如何去选择?

  • 考虑商业化需求和目标,数据库的性能更加重要

  • 在规范性能的问题时,需要适当考虑规范性

  • 故意给某些表增加一些冗余的字段(使多表查询变为单表查询)

  • 故意增加一些计算列(从大数据量减为小数据量的查询)

posted @ 2022-10-05 16:08  GrowthRoad  阅读(32)  评论(0编辑  收藏  举报