数据仓库:星型模型和雪花型模型
数据仓库建模包含了几种数据建模技术,最常用的是:维度建模技术
维度建模的基本概念: 维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法。它本身属于一种关系建模方法
- 维度表(dimension):表示对分析主题所属类型的描述。
- 事实表(fact table):表示对分析主题的度量。事实表包含了与各维度表相关联的外键,并通过JOIN方式与维度表关联。事实表的度量通常是数值类型,且记录数会不断增加,表规模迅速增长。
1. 星型模型
1.1 概念
星型模型:是一种多维的数据关系,它由一个事实表(Fact Table)和一组维表(Dimension Table)组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。事实表的非主键属性称为事实(Fact),它们一般都是数值或其他可以进行计算的数据;如下图:
星型模型
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,所以数据有一定的冗余
1.2 示例
2. 雪花型模型
2.1 概念
雪花型模型:是星型模式的变种,其中某些维表是规范化(将冗余字段用新的表来表示)的,因而把数据进一步分解到附加表中,结果,模式图形成类似于雪花的形状。
雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。
雪花型模型
通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。
2.2 示例
3. 维度模型
3.1 概念
- 为了分析方便,将同一维度的不同层次的维度(如地市ID,区县ID)都融合到事实表中
- 维度模型也是星型模型
- 强调的是先对维度进行预处理,将多个维度集合到一个事实表(包含了多个维度,这样可以组合各维度,形成灵活的报表查询)
3.2 示例
4. 星型模型VS雪花型模型
星型模型和雪花模型的对比,可以从以下四个角度来对比。
4.1 查询性能角度来看
在OLTP-DW环节,由于雪花型要做多个表联接,性能会低于星型架构;但从DW-OLAP环节,由于雪花型架构更有利于度量值的聚合,因此性能要高于星型架构。
4.2 模型复杂度角度
星型架构更简单方便处理
4.3 层次结构角度
雪花型架构更加贴近OLTP系统的结构,比较符合业务逻辑,层次比较清晰。
4.4 存储角度
雪花型架构具有关系数据模型的所有优点,不会产生冗余数据,而相比之下星型架构会产生数据冗余。
5 总结
根据项目经验,一般建议使用星型模型。因为在实际项目中,往往最关注的是查询性能问题,至于磁盘空间一般都不是问题。当然,在维度表数据量极大,需要节省存储空间的情况下,或者是业务逻辑比较复杂、必须要体现清晰的层次概念情况下,可以使用雪花型模型。