维度建模:星型模型与雪花模型
请比较星型模型(Star Schema)和雪花模型(Snowflake Schema)的区别,以及各自的优缺点。
回答
小字辈
维度建模基本概念:
- 事实表(Fact Table): 存储度量值(如订单金额、数量),包含维度外键
- 维度表(Dimension Table): 存储描述性属性(如时间、地区、产品详情)
星型模型(Star Schema):
结构: 事实表在中心,维度表直接连接事实表,呈星形辐射状。
[时间维度表]
|
[产品维度表] — [事实表] — [地区维度表]
|
[用户维度表]
特点:
- 维度表不规范化(包含冗余数据)
- 查询时Join少,性能好
- 维度表宽(列多但行少)
优点: 查询简单、性能高、易于理解 缺点: 维度表数据冗余大(占用更多存储)
雪花模型(Snowflake Schema):
结构: 维度表进一步规范化,拆分为多个子维度表,呈雪花状。
[产品类别表] — [产品维度表] — [事实表] — [地区维度表] — [城市表]
|
[时间维度表]
特点:
- 维度表规范化(分解为子表)
- 减少数据冗余
- Join更多(查询更复杂)
优点: 存储空间少、数据一致性高(修改一处即可) 缺点: 查询时Join多、性能下降、维护复杂
对比表: | 维度 | 星型模型 | 雪花模型 | |------|----------|----------| | 规范化程度 | 低(反范式) | 高(第三范式) | | Join数量 | 少 | 多 | | 查询性能 | 快 | 较慢 | | 存储空间 | 大(冗余) | 小 | | ETL复杂度 | 简单 | 复杂 | | BI工具支持 | 好 | 一般 | | 维护成本 | 低 | 高 |
选型建议:
- 星型模型:OLAP查询为主、追求查询性能、维度变化不频繁
- 雪花模型:存储受限、维度层次复杂、需要严格的数据一致性
- 生产实践: 多数场景使用星型模型,仅对变化缓慢的大维度使用雪花化