数据仓库图解交互式教材
数据建模事实表不只有一种
学习进度0 / 64
EN
首页课程学习事实表不只有一种
2-4数据建模14 分钟

事实表不只有一种

事件、某个时间点的状态和一条业务生命周期,需要三种不同的事实表形态来记录。

事实表类型快照时间语义
核心概念

三类 Fact Table(事实表)

Transaction Fact 记录事件,Periodic Snapshot Fact 记录固定周期的状态,Accumulating Snapshot Fact 记录一个业务过程从开始到结束的里程碑。

事件、状态、生命周期是三种时间问题

账户流水告诉我们“发生了什么”;账户日终余额告诉我们“某天结束时是什么状态”;一笔 LoanNote 的生命周期则要追踪“从放款走到结清经历了哪些节点”。如果用同一种行含义承载三种问题,查询结果就会失去时间语义。

下面的实验把三种事实表放在同一组对照里。先看每类表什么时候新增或更新,再看它的时间字段和适用问题。

Fact Type 实验 · 三组事实形态

选择一种事实表,读懂它的一行

三张卡片先并列说明边界;选择其中一张后,查看样本数据。选到 LoanNote 生命周期时,还可以逐步推进放款、首期应还、首次还款、逾期和结清里程碑。

事实表形态对照台

事件、状态、生命周期有不同的行含义,也有不同的时间问题。

THREE FACT SHAPES · 三种事实表

事件、状态、生命周期不是同一种事实

先看三组区别,再选一组读完整的行含义和时间语义。

交易事实表

Transaction Fact

事件
一行代表什么
一行代表一笔账户交易事件
什么时候新增或更新
有事件发生,才新增一行。
时间语义
使用交易发生或入账的 event_time。
适合回答

发生了几笔交易、交易类型和交易金额。

不要拿它回答

某天没有交易时的账户余额状态。

交易事实表示例数据
transaction_idaccount_idtransaction_typetransaction_amountevent_time
T001A001取款2,00009:31
T002A001转账5,00014:20

同一个账户,可以同时需要两种事实

账户交易流水和账户日终余额并不互相替代:有些日期没有交易,但业务仍然需要一行日终状态。查看余额时必须带上 snapshot_date,查看流水时则回到 transaction_id 和 event_time。

累积快照使用 LoanNote,而不是 LoanContract。因为一份合同可以对应多笔借据,放款、首次应还和结清的里程碑应该属于具体哪一笔借据,必须在行 Grain 上说清楚。