【数据库】范式与反范式
一、第一范式
第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。
上图为反例
符合MySQL的第一范式
二、第二范式
第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。
如下图不符合第二范式
由于商品的名称和价格字段不依赖于商品类别的主键id,所以不符合第二范式。
三、第三范式
第三范式是在第二范式的基础上,确保数据表中的每一列都和主键字段直接相关,也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段。
符合第三范式的t_goods商品信息表
符合第三范式的t_goods_join_category关联表
四、反范式化
如果数据库中的数据量比较大,系统的UV和PV访问频次比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。此时,可以通过在数据表中增加冗余字段来提高数据库的读性能。
五、范式优缺点
1、优点
- 范式化的更新操作通常比反范式化要快。
- 当数据较好的范式化时,就只有很少或者没有重复数据,所有只需要修改更少的数据。
- 范式化的表通常更小,可以更好的放到内存中,所有执行操作更快。
- 很少有多余的数据意味着检索列表数据时更少需要
DISTINCT
或者GROUP BY
语句。
2、缺点
范式化的缺点就是需要更多的关联,不但代价昂贵,而且优化复杂。
六、反范式化优缺点
1、优点
反范式化的设计,将所有字段放到一张表中,可以很好地避免关联。如果不使用关联表,则对大部分查询最差情况——即使表没有使用索引——是全表扫描。当数据比内存大时,这也可能比关联要块很多,因为这样可以避免随机I/O。
2、缺点
- 由于同一个字段,可能冗余到多个表,更新复杂。
- 反范式化的表通常比较大,字段多,涉及多个索引,更新插入性能差。
好学若饥,谦卑若愚
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?