星型模型和雪花模型有什么区别?数仓建模时怎么选?
维度建模事实表维度表
考察意图
数据工程师/分析师核心建模题。考察是否理解事实/维度分工,以及性能与规范的权衡。
回答框架
- 先定义:事实表存度量+外键;维度表存描述属性。
- 星型:维度直接连事实;雪花:维度再规范化拆分。
- 对比查询复杂度、存储、ETL 维护成本。
- 给出选型建议:分析场景多数偏星型/宽表。
参考答案(口述版)
维度建模里:事实表记录「发生了什么」(可加度量、外键);维度表描述「在什么环境下」(谁、何时、何地、何商品)。
星型模型:事实表周围直接挂一圈维度表,维度基本不继续拆。查询路径短,BI 友好。
雪花模型:维度表继续规范化(如商品→品类→大类),更省存储、更少冗余,但 JOIN 更多、理解成本更高。
实践建议:
- OLAP/报表为主:优先星型,甚至对热点维度做宽表/冗余字段换查询简单
- 维度层次复杂且需强一致维护:局部可雪花,但对外仍可提供扁平视图
- 现代仓(Snowflake/BigQuery/Hive)存储便宜,往往「适度反规范化」更划算
回答加分:提到粒度(grain)必须先定;事实分事务/周期快照/累积快照。
关键词
事实表维度表粒度反规范化星型
面试官可能的追问
追问 1:什么是退化维度?
本可做成维度、但属性极少(如订单号),直接存在事实表中的标识字段,避免多余维度表。
常见踩坑
- 没定事实粒度就开始加字段,后期无法聚合
- 过度雪花导致每次取数 6–7 张表 JOIN
记忆锚点
先定粒度;分析场景多数用星型(短路径),不为范式而范式。