一、协作建模:别让业务和IT"打架"!
1.1 工作坊就像装修讨论会 🛋️
生活案例:就像装修房子需要业主和设计师反复沟通,数据建模需要业务人员(懂需求)和程序员(懂技术)一起在白板前"头脑风暴"。
极简步骤:
- 找5-8人围坐(业务主管+数据分析师+开发工程师)
- 用便利贴写出所有业务关键词(如:订单、客户、商品)
- 把关联的便利贴用线连接(就像玩连连看)
- 拍照存档后整理成电子版
1.2 两大神器:气泡图 & 总线矩阵
神器对比表:
工具名称 | 适用场景 | 绘制技巧 | 生活类比 |
---|---|---|---|
气泡图 | 初期需求梳理 | 用不同颜色区分业务过程 | 快递公司的路线图 |
总线矩阵 | 架构设计 | 行写业务过程,列写维度 | 超市货架分类表 |
代码示例:用Excel快速创建总线矩阵
| 业务过程 | 日期维度 | 商品维度 | 门店维度 |
|-------------|----------|----------|----------|
| 每日销售额 | ✅ | ✅ | ✅ |
| 库存周转率 | ✅ | ✅ | ❌ |
二、四步建模法:跟着我做就对了!🚶
2.1 业务过程选择:先抓大鱼
新手误区:想把所有流程一次性建模
正确做法:参考电商平台的"订单支付"核心流程
流程图示例:
2.2 粒度声明:你的数据显微镜🔬
生活案例:超市小票要记录到每个商品?还是整单金额?
决策树:
是否需要分析单品销售趋势? → 是 → 选择"单件商品粒度"
↓否
是否需要分析整单优惠情况? → 是 → 选择"订单粒度"
2.3 维度设计:给你的数据贴标签
常用维度表结构:
CREATE TABLE dim_product (
product_id INT PRIMARY KEY,
product_name VARCHAR(255),
category VARCHAR(50), -- 维度层级
price DECIMAL(10,2),
valid_from DATE, -- SCD处理
valid_to DATE
);
2.4 事实表优化:数学老师的忠告
事实类型速查表:
类型 | 特征 | 示例 | 能否累加 |
---|---|---|---|
可加 | 所有维度都可求和 | 销售额、数量 | ✅ |
半可加 | 部分维度不可求和 | 库存量、账户余额 | ⚠️ |
不可加 | 无实际累加意义 | 单价、温度 | ❌ |
三、模型评审:给数据模型做体检 🩺
3.1 双视角验证法
业务视角Checklist:
- 能否分析最近7天畅销商品?
- 能否对比不同门店的客单价?
- 能否追踪会员消费趋势?
技术视角Checklist:
# 检查分区策略样例
if 事实表大小 > 1TB:
采用按日期分区
elif 查询模式包含门店维度:
增加门店哈希分区
else:
使用默认分区
3.2 版本管理:数据模型的时光机
Git操作示例:
git commit -m "v1.2 新增会员等级维度 | 2023-08-20"
git tag -a v1.2 -m "支持会员运营分析需求"
四、高级技巧:让你的模型会进化 🧬
4.1 缓慢变化维度(SCD)处理
类型对比表:
类型 | 适用场景 | 实现方式 | 存储示例 |
---|---|---|---|
Type1 | 修正错误数据 | 直接覆盖 | 客户电话号码更新 |
Type2 | 历史记录追踪 | 新增版本记录 | 会员等级变更历史 |
Type3 | 有限历史保存 | 添加历史字段 | 保留前两次地址变更 |
SCD处理SQL示例:
-- Type2处理示例
UPDATE dim_customer
SET valid_to = CURRENT_DATE - 1
WHERE customer_id = 1001 AND valid_to = '9999-12-31';
INSERT INTO dim_customer
VALUES (1001, '张伟', '金牌会员', CURRENT_DATE, '9999-12-31');
五、实战演练:一起来找茬! 🔍
5.1 选择题
-
分析每日各门店销售额,事实表粒度应该是?
A) 单笔交易 B) 每日汇总 C) 每周汇总
(答案:B) -
客户手机号变更应该用哪种SCD类型?
A) Type1 B) Type2 C) Type3
(答案:A)
5.2 填空题
“分析库存变化需要建立__可加事实表,其中库存量属于__可加事实。”
(答案:半,半)
🌟 学习加油站
推荐书单:
- 《数据仓库工具箱(第3版)》Kimball著
- 《SQL进阶教程》MICK著
工具推荐:
- 建模工具:Erwin、PowerDesigner
- 协作平台:Confluence、腾讯文档
资源直通车:
🎯下期预告:《ETL子系统与技术》
💬互动话题:你在学习遇到过哪些坑?欢迎评论区留言讨论!
🏷️温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟