退化维度概述
- 退化维度,该技术减少维度的数量, 简化维度数据仓库模式。 简单的模式比复杂的更容易理解, 也有更好的查询性能。
- 有时, 维度表中除了业务主键外没有其他内容。 例如, 在我们的销售订单示例中, 订单维度表除了订单号, 没有任何其他属性, 而订单号是事务表的主键。 我们将这种维度称为退化维度。 业务系统中的主键通常是不允许修改的。 销售订单只能新增, 不能修改已经存在的订单号, 也不会删除订单记录。 因此订单维度表也不会有历史数据版本问题。 退化维度常见于事务和累积快照事实表中。
- 销售订单事实表中的每行记录都包括作为退化维度的订单号代理键。 在操作型系统中, 销售订单表是最细节事务表, 订单号是订单表的主键, 每条订单都可以通过订单号定位, 订单中的其他属性, 如客户、 产品等, 都依赖于订单号。 也就是说,订单号把与订单属性有关的表联系起来。 但是, 在维度模型中, 事实表中的订单号代理键通常与订单属性的其他表没有关联。 可以将订单事实表所有关心的属性分类到不同的维度中, 例如, 订单日期关联到日期维度, 客户关联到客户维度等。 在事实表中保留订单号最主要的原因是用于连接数据仓库与操作型系统, 它也可以起到事实表主键的作用。 某些情况下, 可能会有一个或两个属性仍然属于订单而不属于其他维度。 当然, 此时订单维度就不再是退化维度了。
- 退化维度通常被保留作为操作型事务的标识符。 实际上可以将订单号作为一个属性加入到事实表中。 这样订单维度就没有数据仓库需要的任何数据, 此时就可以退化订单维度。 需要把退化维度的相关数据迁移到事实表中, 然后删除退化的维度。
- 注意, 操作型事务中的控制号码, 例如, 订单号码、 发票号