事实表与维度表详解:概念、分类及案例

2025-07-03 23:40:43

1. 事实表与维度表概述

在数据仓库建模中,数据主要存储在 事实表(Fact Table) 和 维度表(Dimension Table) 这两种核心表结构中。

事实表:存储可量化的业务数据(如销售额、订单数量),通常包含外键连接多个维度表。维度表:存储业务描述性信息(如产品、客户、时间),用于提供查询上下文。

事实表与维度表的结合,使企业能够进行高效的数据分析和报表生成。

2. 事实表详解

2.1 事实表的定义

事实表是数据仓库的核心表,主要存储 可衡量的业务数据,通常包含:

业务指标(如销售额、点击量、订单数)。关联多个维度的外键(如时间ID、产品ID、客户ID)。可能包含分层聚合(如日、周、月统计数据)。

2.2 事实表的分类

根据业务场景,事实表主要分为以下几类:

1. 事务型事实表(Transactional Fact Table)

用途:记录业务系统中的每一条交易数据。示例:订单系统中的每一笔销售记录。案例:

电商订单事实表(记录每笔交易):

订单ID客户ID产品ID日期ID订单金额订单数量10013001200120240301100.002

2. 周期快照事实表(Periodic Snapshot Fact Table)

用途:定期存储业务系统在某一时间点的汇总状态。示例:每月库存快照、每日银行账户余额。案例:

银行账户每日余额表(记录每日账户状态):

账户ID日期ID余额5001202403015000.00

3. 累积快照事实表(Accumulating Snapshot Fact Table)

用途:记录一个业务流程的关键时间节点,随着业务进展不断更新。示例:订单从下单到发货的状态跟踪。案例:

订单生命周期表(记录订单从下单到发货的时间):

订单ID下单时间付款时间发货时间完成时间10012024-03-012024-03-022024-03-052024-03-07

2.3 事实表的粒度

事实表的粒度(Granularity) 指的是数据的细节程度。

高粒度:记录具体事务(如单笔订单)。低粒度:记录汇总数据(如月度销售总额)。

选择适当的粒度 对数据分析的灵活性和存储需求影响重大。

3. 维度表详解

3.1 维度表的定义

维度表存储业务的背景信息,与事实表关联,帮助提供业务数据的详细上下文。

维度表的主要特点:

包含业务属性(如产品名称、类别、客户地址)。数据量相对较小,但字段较多。通过维度表,业务用户可以按多个角度分析数据。

3.2 维度表的分类

1. 退化维度(Degenerate Dimension)

用途:事实表中没有单独的维度表,只存储某些维度信息。示例:订单号,发票号。

2. 规范维度(Conformed Dimension)

用途:可在多个事实表中复用的标准化维度。示例:统一的时间维度、产品维度、客户维度。

3. 角色维度(Role-Playing Dimension)

用途:同一个维度表在不同业务场景下承担不同角色。示例:订单的下单时间、发货时间都使用时间维度表。

4. 嵌套维度(Junk Dimension)

用途:存储多个低基数属性,减少主表宽度。示例:订单状态(新建、已付款、已发货)。

3.3 维度表案例

案例:电商平台的数据仓库

1. 事实表

订单ID日期ID产品ID客户ID销售额数量10012024030120013001100.002

2. 时间维度表

日期ID年份季度月份星期202403012024Q103周五

3. 产品维度表

产品ID产品名称品牌分类2001牙膏某品牌日用品

4. 客户维度表

客户ID姓名性别年龄3001张三男30

4. 结论

事实表与维度表的合理设计,是数据仓库建设的关键。通过选择合适的事实表类型和维度表结构,可以优化数据查询性能,提高业务数据的可读性和可分析性。