直接回答:范式化不是绝对必要。范式(1NF-3NF/BCNF)消除冗余、避免增删改异常,是 OLTP 的默认起点;但当读多写少、关联代价成为瓶颈时,可以有意识地反范式化——冗余字段、预计算汇总、宽表,用空间换时间。
展开解析:反范式化的代价是数据一致性维护转移到应用层:冗余字段要在多处同步更新,漏改就出脏数据。常见适用场景:
- 高频展示字段:帖子列表冗余作者昵称,避免每次 JOIN users。
- 计数器/汇总:文章的评论数、订单总额,实时 COUNT/SUM 太贵。
- 报表/数仓:星型模型天然反范式,面向扫描而非点查。
实践建议:先范式化建模,性能实测证明瓶颈后再局部反范式,并用缓存、物化视图、消息同步等手段兜底一致性;先考虑索引和查询优化,往往不需要走到反范式这一步。
追问方向:冗余数据的一致性方案(事务内双写 vs 异步对账)、物化视图与反范式的关系。