维度退化
Kimball书中对退化维度的描述为:
操作型事务控制号码,例如:订单号码,发票号码,提货单号码通常产生空的维度,经常保存为事实表中的退化维度。退化维度是没有对应维度表的维度键。
维度退化可以这样理解:将维度表中的维度退化到事实表中
比如说订单id,这种量级很大的维度,没必要用一张维度表来进行存储,而我们进行数据查询或者数据过滤的时候又非常需要,所以这种就冗余在事实表里面,这种就叫退化维度,citycode这种我们也会冗余在事实表里面,但是它有对应的维度表,所以它不是退化维度。
还可以这么理解:就是这个东西没有对应的维表,没有修饰它的属性,但是呢,通过它你可以获取一些内容,一些事实,比如说订单编号,你可以获得这个订单里面包含哪些商品,对应的付款人是谁之类的。
维度退化的优点:
- 减少事实表和维度表的关联
- 该技术减少维度的数量, 简化维度数据仓库模式。 简单的模式比复杂的更容易理解, 也有更好的查询性能。
- 如果存在退化维,ETL的过程会变得非常容易
- 可以让group by 等操作变得更快
维度退化的缺点:
- 增加了冗余
总结:当一个维度没有数据仓库需要的任何数据的时候就可以退化此维度,需要把退化的相关数据迁移到事实表中,然后删除退化的维度。退化维度没有对应的维表,但可以获取与之相关的事实。
维度建模与范式
维度建模不需要遵循第三范式(第三范式就是指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系)
规范化的第三范式模型主要应用于操作型过程中,因为对事务的更新与插入仅触及数据库的某几行。然而对于数据挖掘和分析来说,第三范式模型过于复杂,用户查询难以预测的复杂性将耗尽数据库优化器,使查询性能低下。