问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

数据库三大范式与反三范式

创作时间:
作者:
@小白创作中心

数据库三大范式与反三范式

引用
CSDN
1.
https://blog.csdn.net/qq_46138725/article/details/106810421

数据库范式是数据库设计中非常重要的概念,它可以帮助我们避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。本文将介绍数据库的三大范式(1NF、2NF、3NF)和反三范式的基本概念和设计原则。

什么是范式?

范式(Normal Form,简称NF)是指数据库表的规范化程度。在关系型数据库中,范式主要用于减少数据冗余和提高数据一致性。常见的范式有1NF、2NF、3NF、BCNF、4NF、5NF、DKNF和6NF,其中最常用的是1NF、2NF和3NF。

三大范式

1. 第一范式(1NF)

第一范式要求表中的列不可分割,具有原子性。也就是说,表中的每个单元格都应该是不可再分的最小数据单元。

示例:
假如有张表有一列所在地,可分割为省、市,这样就不符合1NF;
应该拆分为:

2. 第二范式(2NF)

第二范式在满足1NF的基础上,要求表中必须有主键,且非主键列需要完全依赖于主键,不能只依赖于主键的一部分。

示例:
假如有一张订单表,产品数量、产品折扣、产品价格和订单号、产品号都有依赖,订单金额和订单时间只和订单号有依赖,要完全依赖,这样就不符合第二范式。
应该分为订单表和订单详情表,用一对多去解决。

3. 第三范式(3NF)

第三范式在满足2NF的基础上,要求非主键列需要直接依赖于主键,不能存在传递依赖。也就是说,不能出现非主键列A依赖于非主键列B,非主键B依赖于主键的情况。

示例:
假如有一张学生表,所有属性都完全依赖于学号,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,而不是主键学号,如下:
需要做如下调整:

反三范式

反三范式与范式的要求正好相反。在反范式的设计模式中,我们可以允许适当的数据冗余,用这个冗余去换取操作数据时间的缩短。也就是利用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联。

具体做法:
在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

总结

  • 1NF:列不可拆分,具有原子性
  • 2NF:满足1NF,有主键,非主键需要完全依赖主键,不能依赖部分
  • 3NF:满足2NF,非主键需要直接依赖主键,不能传递依赖
  • 反三范式:通过增加冗余、聚合的手段来提升性能

理解这些范式和反范式的原则,对于设计高效、一致的数据库结构至关重要。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号