数据库规范化
数据库规范化通过拆分冗余和明确依赖关系,降低更新异常并提升结构清晰度,是关系型建模的基础方法。
#type / concept
#status / growing
#tech / dev / backend
#resource / database
[!info] related notes
数据库规范化
一句话定义
规范化是一组拆分表结构的原则,用来减少冗余、避免更新异常,并让依赖关系更清晰。
核心机制 / 工作原理
规范化关注的是:
- 同一事实不要在多处重复存储
- 字段应该依赖“该依赖的键”
- 修改、插入、删除时不要因为结构混乱产生异常
常见层级:
- 1NF:列值原子化,不把一列塞成多个值
- 2NF:在有复合主键时,非主属性不能只依赖主键的一部分
- 3NF:非主属性不应传递依赖于主键
- BCNF:比 3NF 更严格,强调决定因素本身也应是候选键
最小例子 / 最小场景
如果把“订单信息”和“商品明细”全放进一张表:
- 同一个订单号会重复很多次
- 用户名、地址也会被重复
- 修改地址时可能出现多处不一致
更合理的拆分通常是:
ordersorder_itemsproducts
边界与易混淆点
- 规范化不是越高越神圣。性能、报表和读优化场景里,适度反规范化是正常工程权衡。
- 规范化解决的是结构问题,不直接替代索引设计和查询优化。
- 规范化讨论的是“依赖关系是否清楚”,不是“表越多越高级”。