面试笔记 | 数据库的三大范式、反范式

本文详细介绍了数据库的三大范式,包括第一范式、第二范式和第三范式,以及它们之间的区别和优缺点。同时探讨了反范式设计,解释了在特定业务场景下如何通过反范式提高响应时间和减少关联,以及其可能带来的数据冗余和维护挑战。
摘要由CSDN通过智能技术生成

01 数据库三大范式

什么是范式
  • 范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

各范式特点:

  • (第二范式要遵循第一范式,第三范式要遵循第二范式。)
第一范式:
  • 当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R是满足第一范式,即属性不可分。
  • 保证列的原子性,保证列不可再分。
第二范式:
  • 如果关系模式R满足第一范式,并且R的所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式
  • 一个表只说明一个事物,保存一种数据。
  • 每列都与主键相关,而不能只与主键的某一部分相关
第三范式:
  • 设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式
  • 每列都与主键有直接关系,不存在传递依赖。
  • 非主键依赖主键,不能依赖于其他非主键。
第二范式和第三范式的区别
  • 第二范式:非主键列是否依赖主键(包括一列通过某一列间接依赖主键),要是有依赖关系就是第二范式;
  • 第三范式:非主键列是否直接依赖主键,不能是那种通过传递关系的依赖。要是符合这种依赖关系就是第三范式。
范式优缺点
经过前面的讲解和案例分析可知范式具备以下优点:
  • 避免数据冗余,减少维护数据完整性的麻烦;
  • 减少数据库的空间;
  • 数据变更速度快。
同时,也有如下缺点:
  • 按照范式的规范设计的表,等级越高的范式设计出来的表数量越多。
  • 获取数据时,表关联过多,性能较差。
  • 表的数量越多,查询所需要的时间越多。也就是说所用的范式越高,对数据操作的性能越低。

02 反范式

  • 范式是普适的规则,满足大多数的业务场景的需求。对于一些特殊的业务场景,范式设计的表,无法满足性能的需求。此时,就需要根据业务场景,在范式的基础之上进行灵活设计,也就是反范式设计。
反范式设计主要从三方面考虑:
  • 业务场景;
  • 相应时间;
  • 字段冗余。
反范式设计就是用空间来换取时间,提高业务场景的响应时间,减少多表关联。主要的优点如下。
  • 允许适当的数据冗余,业务场景中需要的数据几乎都可以在一张表上显示,避免关联;
  • 可以设计有效的索引。
范式与反范式异同

范式化模型:

  • 数据没有冗余,更新容易;
  • 当表的数量比较多,查询数据需要多表关联时,会导致查询性能低下。

反范式化模型:

  • 冗余将带来很好的读取性能,因为不需要 join 很多表;
  • 虽然需要维护冗余数据,但是对磁盘空间的消耗是可以接受的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值