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