📘 Week2 · 数据仓库建模与维度建模笔记
1.1 数据仓库建模的意义
数据建模是数据仓库设计的核心环节,它就像整理图书馆或规划城市一样,帮助我们把复杂的数据结构化、有序化。
合理的数据模型可以:
-
📈 提升查询性能
-
💰 降低数据冗余与计算成本
-
⚙️ 提高分析效率
-
✅ 确保数据口径一致与质量可靠
1.2 数据仓库建模方法论
1.2.1 ER 模型(Inmon 方法)
由 Bill Inmon(数据仓库之父) 提出,采用 企业级视角 构建 实体 - 关系模型(ER),强调数据的完整性与一致性。
数据库规范化
通过一系列范式(1NF~5NF)减少冗余、提升一致性。
常见三范式:
-
1NF:字段原子化。
-
2NF:每个非主键字段完全依赖主键。
-
3NF:消除传递依赖。
核心思想:
-
强调规范化设计(1NF~3NF)
-
表结构多,层次深,利于数据治理
-
不太适合直接分析场景
📘 应用场景:企业级统一数据平台建设。
1.2.2 维度模型(Kimball 方法)
由 Ralph Kimball 提出,面向业务分析,采用 事实表(Fact)+ 维度表(Dimension) 的结构。
核心思想:
-
面向分析,简单直观
-
性能高,查询快
-
模型结构清晰:星型 / 雪花模型
📘 应用场景:数据分析、中台建设。
维度建模理论之事实表
2.1 事实表概述
事实表用于记录业务过程中的 度量指标(如销售额、订单数)及其关联的维度(如时间、地区、用户)。
其特点是:
-
行数多、列数少(长而瘦)
-
增长快、更新频繁
🔹 常见类型:
-
事务型事实表(最细粒度)
-
周期快照事实表(定期状态)
-
累积快照事实表(业务流程)
2.2 事务型事实表
记录最细粒度的业务事件,如下单、支付、退货。
设计步骤:
-
选择业务过程
-
定义粒度(每行代表什么)
-
确定维度(时间、用户、商品等)
-
确定事实(金额、数量等)
缺点:
-
对存量指标支持较差
-
跨事务分析效率低(需多表 Join)
2.3 周期快照事实表
记录固定时间周期内的数据状态(如每日库存、账户余额)。
优点:
-
支持趋势分析
-
查询效率高
缺点:
-
不能按时间简单累加(如库存)
事实分类:
-
可加(销售额)
-
半可加(库存)
-
不可加(比例)
2.4 累积快照事实表
用于表示一个完整业务流程中的多个关键节点,如:
下单 → 支付 → 发货 → 收货。
优点:
-
支持流程时长分析
-
避免大表 Join,性能高
维度建模理论之维度表
3.1 概述
维度表描述事实发生的 环境信息(如时间、地区、用户、商品等),是事实表分析的基础。
包含内容:
-
维度主键(唯一标识)
-
描述性属性(如名称、分类)
3.2 维度表设计步骤
-
确定与事实表关联的维度
-
确定维度主表与相关维表
-
补充丰富属性(尽量在维表中沉淀)
3.3 维度设计要点
3.3.1 模型结构
👉 推荐分析层使用 星型模型。
3.3.2 维度变化(慢变维)
方式一:全量快照表
每日保存一份完整维度快照。
✅ 简单易理解,❌ 占用空间大。
方式二:拉链表(推荐)
保存维度生效起止时间段,实现历史追溯。
✅ 节省存储,适合大型维度(用户、商品)。
3.3.3 多值维度与属性
-
若事实与维度为一对多 → 降低事实粒度。
-
若属性本身多值 → 可拆多列或键值对存储。
📚 总结
✨ 核心理念总结:
“以业务过程为中心,以分析需求为导向,以事实与维度为框架。”