什么是数据库范式,为什么要反范式?

一、典型回答

数据库范式其实是数据库的设计上的一些规范,这些规范可以让数据库的设计更加简洁、清晰,同时也会更好的保证一致性。

二、三范式

第一范式(1NF):数据库表中的属性的原子性,要求属性具有原子性,不可被拆分。比如:地址如果都细化拆分为省、市、街道、小区等等多个字段,这就是符合第一范式的,如果地址就是一个字段,那就不符合了。

第二范式(2NF):数据库表中的每个实例或记录必须可以被唯一区分,说白了就是要有主键,其他的字段都依赖于主键。

第三范式(3NF):任何非主属性不依赖于其他非主属性,也就是说,非主键外的所有字段必须互不依赖。

如果我们在做表结构设计的时候,完全遵守数据库三范式,确实可以避免一些写时异常,提升一些写入性能,但是同时也会丢失一些读取性能。因为在遵守范式的数据库设计中,表中不能有任何冗余字段,这就使查询的时候就会经常有多表关联查询,这无疑是比较耗时的,于是就有了反范式化。所谓反范式化是一种针对遵从设计范式的数据库的性能优化策略。也就是说,反范式化不等于非范式化,反范式化一定发生在满足设计的基础之上。前者相当于遵守所有规则,再进行局部调整。

比如:我们可以在表中增加一些冗余字段,方便我们进行数据查询,而不再需要经常做多表join,但同时,这也带来一个问题,那就是这些冗余字段之间的一致性如何保证?这个问题本来在遵守范式的设计中是不会有的,一旦做了反范式,那就需要开发者自行解决了。

反范式其实本质上是软件开发中一个比较典型的方案,那就是"空间换时间",通过做一些数据冗余,来提升查询速度。在互联网业务中,比较典型的就是数据量大,并发高,并且通常查询的频率要远高于写入的频率,所以适当的做一些反范式,通过一些字段的冗余,可以提升查询性能,降低响应时长,从而提升并发度。

参考:Hollis

相关推荐
2301_77962241几秒前
如何自动计算SQL税费信息_利用触发器实时扣算税额
jvm·数据库·python
weixin_44401293几秒前
mysql在高并发环境下的读写分离与负载均衡
jvm·数据库·python
2401_82469766几秒前
如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
jvm·数据库·python
CLX05052 分钟前
如何管理Oracle服务器的内核共享内存_shmmax与shmall计算
jvm·数据库·python
云边有个稻草人4 分钟前
端边云一体化时序数据管理:数据库选型与技术实现
数据库·端边云时序数据方案·工业物联网时序数据库·开源时序数据库选型·高压缩时序存储技术·时序数据库选型指南·tsfile 存储引擎技术
2301_812539675 分钟前
golang如何实现备忘录模式_golang备忘录模式实现方案
jvm·数据库·python
weipt5 分钟前
国产数据库私有化部署实战:PolarDB for PostgreSQL 免费容器版踩坑记
数据库·postgresql
woxihuan1234568 分钟前
HTML怎么构建课程学习仪表盘_HTML进度环+任务列表【教程】
jvm·数据库·python
三产9 分钟前
Hermes 教程 03:Skills 系统
android·java·数据库
2401_8844541510 分钟前
mysql数据库执行全量备份影响业务_利用xtrabackup实现无锁备份
jvm·数据库·python