#5 数仓建模 中等

星型模型和雪花模型有什么区别?数仓建模时怎么选?

维度建模事实表维度表

🎯 考察意图

数据工程师/分析师核心建模题。考察是否理解事实/维度分工,以及性能与规范的权衡。

📐 回答框架

  1. 先定义:事实表存度量+外键;维度表存描述属性。
  2. 星型:维度直接连事实;雪花:维度再规范化拆分。
  3. 对比查询复杂度、存储、ETL 维护成本。
  4. 给出选型建议:分析场景多数偏星型/宽表。

💬 参考答案(口述版)

维度建模里:事实表记录「发生了什么」(可加度量、外键);维度表描述「在什么环境下」(谁、何时、何地、何商品)。

星型模型:事实表周围直接挂一圈维度表,维度基本不继续拆。查询路径短,BI 友好。
雪花模型:维度表继续规范化(如商品→品类→大类),更省存储、更少冗余,但 JOIN 更多、理解成本更高。

实践建议:
- OLAP/报表为主:优先星型,甚至对热点维度做宽表/冗余字段换查询简单
- 维度层次复杂且需强一致维护:局部可雪花,但对外仍可提供扁平视图
- 现代仓(Snowflake/BigQuery/Hive)存储便宜,往往「适度反规范化」更划算

回答加分:提到粒度(grain)必须先定;事实分事务/周期快照/累积快照。

🔍 关键词

事实表维度表粒度反规范化星型

💭 面试官可能的追问

追问 1:什么是退化维度?

本可做成维度、但属性极少(如订单号),直接存在事实表中的标识字段,避免多余维度表。

⚠️ 常见踩坑

  • 没定事实粒度就开始加字段,后期无法聚合
  • 过度雪花导致每次取数 6–7 张表 JOIN

🧠 记忆锚点

先定粒度;分析场景多数用星型(短路径),不为范式而范式。