作者:王永伟
规范化和反规范化
当属性层次被实例化为一系列维度,而不是单一的维度时,此模式被称为雪花模式。大多数联机事务处理系统(OLTP)的底层数据结构在设计时采用此种规范化技术,通过规范化处理将重复属性移至其自身所属的表中,删除冗余数据。
此种方法用在OLTP系统中可以有效避免数据冗余导致的不一致性。比如在OLTP系统中,存在商品表和类目表,且商品表中冗余有类目表的属性字段,假设对某类目进行更新,则必须更新商品表和类目表,且由于商品和类目是一对多的关系,商品表可能每次需要更新几十万甚至上百万条记录,这是不合理的。而对于联机分析处理系统(OLAP),数据是稳定的,不存在OLTP系统中存在的问题。
对于淘系商品维度,如果采用雪花模式进行规范化处理,将表现为如下形式:
将维度的属性层次合并到单个维度中的操作称为反规范化。分析系统的主要目的是用于数据分析和统计,如何更方便用户进行统计分析决定了分析系统的优劣。采用雪花模式,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差;采用反规范化处理,方便易用且性能好。
对于淘宝商品维度,如果采用反规范化处理,将表现为如下形式:
如上所述,从用户的角度来看这简化了模型,并且使数据库查询优化器的连接路径比完全规范化的模型简化许多。反规范化的维度仍包含与规范化模型同样的信息和关系,从分析角度来看,没有丢失任何信息,但复杂性降低了。
采用雪花模式,除了可以节约一部分存储,对于OLAP系统来说没有其它效用。而现阶段存储的成本非常低。基于易用性和性能考虑,维度表一般是很不规范化的。实际应用中,几乎总是使用维度表的空间来换取简明性和查询性能。
更多数仓理论请关注:《大数据之路:阿里巴巴大数据实践 》
推荐几种建模工具:ERStudio / ERWin / PowerDesigner