规范化通过组织数据来减少冗余并提高数据完整性。其目标是确保每个事实只存储一次。如果客户地址出现在每个订单记录中,那么地址变更就需要在数百个地方进行更新。漏掉一个地方,数据就会不一致。规范化会将地址移至客户表中。订单通过 ID 引用客户。地址只需存储一次。在客户表中更改地址,所有订单都会反映出新的地址值。
该过程遵循范式。第一范式消除重复组。第二范式消除部分依赖。第三范式消除传递依赖。每个范式都增加了约束,进一步减少冗余。更高范式存在,但在实践中很少使用。大多数事务数据库的目标是达到第三范式。规范化有利有弊。更多的表意味着更多的连接,这会降低查询速度。对于事务系统而言,完整性带来的收益大于性能损失。对于分析系统而言,情况通常恰恰相反。具有宽表和冗余列的非规范化模式查询速度更快,因为它们避免了连接。这就是为什么数据仓库使用星型和雪花型模式,它们刻意进行非规范化。合适的规范化级别取决于工作负载。事务系统进行规范化。分析系统进行非规范化。两者对于各自的用途都是正确的。
正规形式
- 第一范式——无重复组
- 第二范式——无偏依赖
- 第三范式——无传递依赖
- 博伊斯-科德范式——第三范式的更严格版本
规范化关乎完整性。每个事实只存储一次,数据就能保持一致。多次存储则不可避免地会出现不一致。
Comments
No comments yet. Be the first to share a thought.
Leave a comment