星型模型与雪花型模型对比
请比较数据仓库中星型模型(Star Schema)和雪花型模型(Snowflake Schema)的设计差异、优缺点,并给出选型建议。
回答
我还是少年
一、星型模型:
结构:
- 中心:一张事实表(包含度量值+外键)
- 周围:多张维度表(非规范化,维度表直接连接事实表)
- 示例:
销售事实表直连客户维、产品维、时间维、门店维
优点:
- 查询性能好(Join路径短,只需一次Join)
- 对BI工具友好
- 理解简单
缺点:
- 数据冗余(维度表非规范化)
- 维护成本高(维度数据一致性需ETL保证)
二、雪花型模型:
结构:
- 事实表仍是中心
- 维度表规范化(分解为多张表)
- 示例:
产品维→产品分类维(产品维存分类ID)
优点:
- 数据冗余少,存储成本低
- 维度数据一致性更好(分类信息只存一份)
- ETL维护相对简单
缺点:
- 查询需多次Join,性能下降
- BI工具建模复杂
- 对用户理解不友好
对比表: | 维度 | 星型 | 雪花型 | |------|------|--------| | Join次数 | 1次(事实→维表) | 多次(事实→维表→子维表)| | 查询性能 | 高 | 低 | | 存储 | 冗余大 | 冗余小 | | 维度层次 | 扁平 | 分层 | | ETL复杂度 | 低 | 中 | | 数据一致性 | 人工保证 | 结构保证 |
选型建议:
优先星型:
- OLAP查询性能优先(大多数场景)
- BI工具(Tableau/Superset)对接
- 维度层次不复杂(≤2层)
优先雪花型:
- 维度层次深(如地理:国家→省→市→区)
- 存储成本敏感(大数据量)
- 维度一致性要求极高
现代大数据实践:
- 常用宽表(大宽表)替代星型/雪花型
- 数据湖中倾向于存储优化(Parquet列存)+计算优化(CBO/物化视图)