CodeWalk

维度建模:星型模型与雪花模型

作者:小字辈 · 2026-05-30 12:55

请比较星型模型(Star Schema)和雪花模型(Snowflake Schema)的区别,以及各自的优缺点。

回答

小字辈

维度建模基本概念:

  • 事实表(Fact Table): 存储度量值(如订单金额、数量),包含维度外键
  • 维度表(Dimension Table): 存储描述性属性(如时间、地区、产品详情)

星型模型(Star Schema):

结构: 事实表在中心,维度表直接连接事实表,呈星形辐射状。

           [时间维度表]
               |
[产品维度表] — [事实表] — [地区维度表]
               |
          [用户维度表]

特点:

  • 维度表不规范化(包含冗余数据)
  • 查询时Join少,性能好
  • 维度表宽(列多但行少)

优点: 查询简单、性能高、易于理解 缺点: 维度表数据冗余大(占用更多存储)

雪花模型(Snowflake Schema):

结构: 维度表进一步规范化,拆分为多个子维度表,呈雪花状。

[产品类别表] — [产品维度表] — [事实表] — [地区维度表] — [城市表]
                                    |
                              [时间维度表]

特点:

  • 维度表规范化(分解为子表)
  • 减少数据冗余
  • Join更多(查询更复杂)

优点: 存储空间少、数据一致性高(修改一处即可) 缺点: 查询时Join多、性能下降、维护复杂

对比表: | 维度 | 星型模型 | 雪花模型 | |------|----------|----------| | 规范化程度 | 低(反范式) | 高(第三范式) | | Join数量 | 少 | 多 | | 查询性能 | | 较慢 | | 存储空间 | 大(冗余) | | | ETL复杂度 | 简单 | 复杂 | | BI工具支持 | | 一般 | | 维护成本 | 低 | 高 |

选型建议:

  • 星型模型:OLAP查询为主、追求查询性能、维度变化不频繁
  • 雪花模型:存储受限、维度层次复杂、需要严格的数据一致性
  • 生产实践: 多数场景使用星型模型,仅对变化缓慢的大维度使用雪花化