当前位置: 首页 > news >正文

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

一、典型回答

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

二、三范式

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

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

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

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

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

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

参考:Hollis

http://www.lryc.cn/news/383725.html

相关文章:

  • 记录 Bonobo Git 服务器 SMTP 设置
  • 事务性邮件发送如何选择邮件群发工具
  • 替换特殊符号
  • 深入浅出 langchain 1. Prompt 与 Model
  • C#二进制、十进制、十六进制数据转换
  • 晶方科技:台积电吃饱,封装迎春?
  • ConcurrentModificationException
  • 倾斜摄影OSGB一键轻量化输出3dTiles!
  • 深度清洁:使用npm prune命令优化你的Node.js项目
  • [Gstreamer] gstbasesink 的 QOS 机制
  • 关于bash脚本中extglob不生效的问题
  • idea运行报错 java: 错误: 无效的源发行版:16
  • selenium 处理网页上的弹窗
  • 光模块市场受益于AI热潮同比增长45%,行业前景看好
  • qt经典界面框架
  • 微信群聊不见了?掌握这4个技巧轻松找回,简直太爽了
  • Python Type Hint有啥用
  • 【深度学习】基于因果表示学习的CITRIS模型原理和实验
  • CentOS9镜像下载地址加速下载
  • GPT-5:博士级智能的跨越——未来已来,人机共生的新篇章
  • 陶建辉入选 2023 年度“中国物联网行业卓越人物榜”
  • 2024南京国际自有品牌产品博览会
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇你就是网络安全高手了。
  • 四步轻松搞定!探索字节最新AnimateDiff-Lightning:高质量视频生成的秘密武器!
  • Jenkins定时构建自动化(一):Jenkins下载安装配置
  • 最新国内首码对接app平台汇总,一手项目资源!
  • 掌握 Perl 中的进程间通信:深入探索 IPC 的世界
  • Vite响应Ajax请求
  • 使用Jenkins进行持续集成与部署
  • 【SpringSecurity】认证与鉴权框架SpringSecurity——认证