核心概念
三类 Fact Table(事实表)
Transaction Fact 记录事件,Periodic Snapshot Fact 记录固定周期的状态,Accumulating Snapshot Fact 记录一个业务过程从开始到结束的里程碑。
事件、某个时间点的状态和一条业务生命周期,需要三种不同的事实表形态来记录。
Transaction Fact 记录事件,Periodic Snapshot Fact 记录固定周期的状态,Accumulating Snapshot Fact 记录一个业务过程从开始到结束的里程碑。
账户流水告诉我们“发生了什么”;账户日终余额告诉我们“某天结束时是什么状态”;一笔 LoanNote 的生命周期则要追踪“从放款走到结清经历了哪些节点”。如果用同一种行含义承载三种问题,查询结果就会失去时间语义。
下面的实验把三种事实表放在同一组对照里。先看每类表什么时候新增或更新,再看它的时间字段和适用问题。
三张卡片先并列说明边界;选择其中一张后,查看样本数据。选到 LoanNote 生命周期时,还可以逐步推进放款、首期应还、首次还款、逾期和结清里程碑。
先看三组区别,再选一组读完整的行含义和时间语义。
发生了几笔交易、交易类型和交易金额。
某天没有交易时的账户余额状态。
transaction_id | account_id | transaction_type | transaction_amount | event_time |
|---|---|---|---|---|
| T001 | A001 | 取款 | 2,000 | 09:31 |
| T002 | A001 | 转账 | 5,000 | 14:20 |
账户交易流水和账户日终余额并不互相替代:有些日期没有交易,但业务仍然需要一行日终状态。查看余额时必须带上 snapshot_date,查看流水时则回到 transaction_id 和 event_time。
累积快照使用 LoanNote,而不是 LoanContract。因为一份合同可以对应多笔借据,放款、首次应还和结清的里程碑应该属于具体哪一笔借据,必须在行 Grain 上说清楚。