【数据库】范式与反范式

一、第一范式

第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。

上图为反例

符合MySQL的第一范式

二、第二范式

第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。

如下图不符合第二范式

由于商品的名称和价格字段不依赖于商品类别的主键id,所以不符合第二范式。

三、第三范式

第三范式是在第二范式的基础上,确保数据表中的每一列都和主键字段直接相关,也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段。

符合第三范式的t_goods商品信息表

符合第三范式的t_goods_join_category关联表

四、反范式化

如果数据库中的数据量比较大,系统的UV和PV访问频次比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。此时,可以通过在数据表中增加冗余字段来提高数据库的读性能。

五、范式优缺点
1、优点
  • 范式化的更新操作通常比反范式化要快。
  • 当数据较好的范式化时,就只有很少或者没有重复数据,所有只需要修改更少的数据。
  • 范式化的表通常更小,可以更好的放到内存中,所有执行操作更快。
  • 很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。
2、缺点

范式化的缺点就是需要更多的关联,不但代价昂贵,而且优化复杂。

六、反范式化优缺点
1、优点

反范式化的设计,将所有字段放到一张表中,可以很好地避免关联。如果不使用关联表,则对大部分查询最差情况——即使表没有使用索引——是全表扫描。当数据比内存大时,这也可能比关联要块很多,因为这样可以避免随机I/O。

2、缺点
  • 由于同一个字段,可能冗余到多个表,更新复杂。
  • 反范式化的表通常比较大,字段多,涉及多个索引,更新插入性能差。
posted @   二月无雨  阅读(315)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示