数仓建模理论中,通常将表分为事实表和维度表。事实表加维度表能够描述一个完整的业务事件。
事实表
事实表中每行数据代表一个业务事件。”事实”表示的是业务事件的度量值。事实表又可以分为以下几种:
事务性事实表
以每个事务或事件为单位。
保存的是最原子的数据,也称“原子事实表”,一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。
通过事务事实表,还可以建立聚集事实表,为用户提供高性能的分析。
不适用于:存量型指标、多事务关联统计。
周期性快照事实表
不保留所有数据,只保留固定时间间隔的数据。
周期性快照事实表的日期维度通常是记录时间段的终止日,记录的事实是这个时间段内一些聚集事实值。事实表的数据一旦插入即不能更改,其更新方式为增量更新。
累积性快照事实表
用于跟踪业务事实的变化。
累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。
三种事实表对比
特点 | 事务性事实表 | 周期性快照事实表 | 累积性快照事实表 |
---|---|---|---|
时间/时期 | 时间 | 时期 | 时间跨度较短的多个时点 |
粒度 | 每行代表一个交易事件 | 每行代表一个时间周期 | 每行代表一个业务周期 |
事实表加载 | 新增 | 新增 | 新增和修改 |
事实表更新 | 不更新 | 不更新 | 新事件产生时更新 |
时间维 | 业务日期 | 时期末 | 多个业务过程的完成日期 |
事实 | 交易活动 | 时间周期内的绩效 | 限定多个业务阶段内的绩效 |
事实表设计方法
- 选择业务过程及确定事实表类型
- 声明粒度
- 确定维度
-
事实表设计原则
尽可能包含所有与业务过程相关的事实
- 只选择与业务过程相关的事实
- 分解不可加性事实为可加的组件
- 在选择维度和事实之前必须先声明粒度
- 在同一个事实表中不能有多种不同粒度的事实
- 事实的单位要保持一致
- 对事实的 null 值要处理
- 使用退化维度提高事实表的易用性
维度表
维度表包含了事实表中指定属性的相关详细信息,最常用的维度表有日期维度、城市维度等。
维度的作用一般是查询约束、分类汇总以及排序等。
维度表一般是指对应业务状态编号的解释表,也可以称为码表。
如下表:
订单状态编号 | 订单状态名称 |
---|---|
1 | 未支付 |
2 | 支付 |
… | … |
退化维度
退化维度是维度建模领域中的一个非常重要的概念。退化维度。这种维度指的是直接把一些简单的维度放在事实表中。维度退化可以用来进行事实表的过滤查询、实现聚合操作、分组使用等。
简单来说维度退化就是将维度退化到事实表中,减少事实表和维度表的关联。对于简单的维度来说,就是不创建自己的维表,而将其迁移事实表中。
维度表设计方法
- 第一步:选择维度或新建维度。
- 第二步:确定主维表。
- 第三步:确定相关维表。
- 第四步 :确定维度属性 。
附参考资料: