数据仓库建模理论(一)
维度模型
- 维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。
- 选择业务处理过程 > 定义粒度 > 选择维度 > 确定事实
一、星型模型
主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。
二、雪花模型
一个事实表关联多个维度表,维度表再关联维度表。
三、星座模型
多张事实表共享维度表,只反映是否有多个事实表,他们之间是否共享一些维度表。
事实表
用来存储事实的表,这些事实通常是指可以量化的业务指标,如销售额、订单数量等。事实表的特点是有大量的行,每行代表一个业务事件的度量。例如,一张记录了公司所有业务交易的清单。每一条记录都是一个事实,比如一次销售或一笔支出。
一、事务事实表
也称原子事实表,描述业务过程,跟踪控件或时间上某点的度量事件,保存的是最原子的数据。类似于mysql binlog日志,每一次相关的change都记录下来,生成一行新的数据。
二、周期快照事实表
以一个周期为时间间隔,来记录事实,一般周期可以是每天、每周、每月、每年等。只看某个业务过程,比如订单收货,数据按订单收货时间来切分,周期可以为每天、每月等。
三、累积快照事实表
用来描述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点;当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改。要看整个生命周期的多个业务过程,比如:创建订单 → 买家付款 → 卖家发货 → 买家确认收货。粒度是一个订单一行数据,创建订单时间,付款时间,发货时间,收货时间,分别作为一个字段,便于计算不同业务过程的时间间隔。
四、区别
事务事实表 | 周期快照事实表 | 累计快照事实表 | |
---|---|---|---|
时期/时间 | 离散事务时间点 | 以有规律的、有预测的 | 用于时间跨度不确定的不断变化的工作流 |
日期维度 | 事务日期 | 快照日期 | 相关业务过程涉及的多个日期 |
粒度 | 每行代表实体的一个事务 | 每行代表某时间周期的一个实体 | 每行代表一个实体的生命周期 |
事实 | 事务事实 | 累积事实 | 相关业务过程事实和时间间隔事实 |
事实表加载 | 插入 | 插入 | 插入与更新 |
事实表更新 | 不更新 | 不更新 | 业务过程变更时更新 |
五、事实表设计八大原则
1、尽可能包含所有与业务过程相关的事实
2、只选择与业务过程相关的事实
- 例如,订单的下单这个业务过程,事实表中不应该存在支付金额这个表示支付业务过程的事实。
3、分解不可加性事实为可加的组件
- 例如,订单的优惠率,应分解为订单原价金额与订单优惠金额两个事实存储在事实表中。
4、在选择维度和事实之前必须先声明粒度
5、在同一个事实表中不能有多种不同粒度的事实
6、事实的单位要保持一致
7、对事实的null值要处理
8、使用退化维度提高事实表的易用性
维度表
一、概念
- 维度表就像是事实表的说明书。它们帮助我们理解事实表中的数字背后的故事。例如,我们可能会有一个产品维度表,它包含了产品的详细信息。
- 维度表包含了事实表中指定属性的相关详细信息,最常用的维度表有日期维度、城市维度等。
- 表命名以dim开头,后面加上对该指标的描述
二、维度表设计原则
维度的作用一般是查询约束、分类汇总以及排序
1、维度属性尽量丰富,为数据使用打下基础
2、给出详实的、富有意义的文字描述
3、区分数值属性和事实
4、沉淀出通用的维度属性,为建立一致性维度做好铺垫
5、退化维度:直接把一些简单的维度放在事实表中
6、缓慢变化维:随时间发生变化的维度
事实表和维度表的关系
事实表和维度表通过外键关联,这种关系使得我们可以将量化的业务指标(事实)与描述性的属性(维度)结合起来,进行多角度的数据分析。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构