在维度建模中,根据粒度划分,数据表主要分为维度表和事实表。而事实表又可以分为三种类型:事务型事实表、周期快照型事实表和累计快照型事实表。本文将详细介绍这三种事实表,并提供相应的代码示例。
目录
- 1. 事务型事实表
- 示例
- 2. 周期快照型事实表
- 示例
- 3. 累计快照型事实表
- 示例
- 总结
1. 事务型事实表
事务型事实表用于记录每个事务的详细情况,保存最为原子化的数据。这种表中的每一行数据都代表一个独立的事务,在事务发生时记录下来。事务型事实表的粒度非常细,通常用于分析单个事件或行为。
示例
假设我们有一个电子商务网站,我们希望记录每一笔订单的详细信息。可以创建一个事务型事实表 orders
,如下所示:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE,
quantity INT,
total_price DECIMAL(10, 2)
);
每条记录代表一笔订单,记录了订单ID、客户ID、产品ID、订单日期、数量和总价。
2. 周期快照型事实表
周期快照型事实表用于定期记录业务的累计数据,这些时间间隔是可预测的,比如每天、每周或每月。这种表适用于需要在固定时间点查看业务表现的场景。
示例
假设我们想要按月统计电子商务网站的销售情况,可以创建一个周期快照型事实表 monthly_sales
,如下所示:
CREATE TABLE monthly_sales (
month DATE PRIMARY KEY,
total_orders INT,
total_revenue DECIMAL(10, 2),
total_customers INT
);
每条记录代表一个月的累计销售数据,包括订单总数、总收入和总客户数。
3. 累计快照型事实表
累计快照型事实表用于记录业务生命周期中多个阶段的开始和结束时间。这种表中通常包含多个时间字段,反映业务的不同阶段。与周期快照不同,累计快照型事实表的时间点不可预测,随着业务进展动态更新。
示例
假设我们希望跟踪客户订单的处理进度,可以创建一个累计快照型事实表 order_process
,如下所示:
CREATE TABLE order_process (
order_id INT PRIMARY KEY,
order_date DATE,
shipping_date DATE,
delivery_date DATE,
return_date DATE
);
每条记录代表一个订单的处理过程,包含订单日期、发货日期、交付日期和退货日期。
总结
通过事务型事实表、周期快照型事实表和累计快照型事实表的划分,可以更好地满足不同业务场景下的数据分析需求。
事务型事实表记录最细粒度的事务数据,周期快照型事实表定期记录累计数据,累计快照型事实表则记录业务各阶段的变化情况。
理解这些表的用途和特点,有助于我们在维度建模中做出更合理的数据设计。