Panda
发布于 2025-04-15 / 8 阅读
0
0

数据仓库建模方法

数据仓库主要的建模方法是:维度建模和实体关系建模(ER建模)。其他还有ER模型的衍生模型:Data Vault 模型和Anchor 模型,但很少使用。

维度建模

概念描述:

维度建模由 Ralph Kimball 在《数据仓库工具箱》一书中提出的建模方法,其核心思想是将数据组织成事实表和维度表。

  • 事实表:用于存储业务过程中的度量值,比如销售金额、订单数量等,它包含了与业务过程相关的事实数据,每行代表一个业务事件。

  • 维度表:为事实表中的度量值提供上下文信息,例如时间、地点、产品等,维度表可以理解为对业务事件发生的环境进行描述。

维度建模方法的提出主要是为了应对分析决策场景,所以维度建模在分析需求中的响应速度更快,并且在大规模查询中的性能更强。

维度建模的步骤:

1. 选择业务过程

确定要建模的业务流程,例如销售业务、库存管理业务等。业务过程是业务活动的一个明确的操作单元,是维度建模的起点。

2. 声明粒度

粒度指事实表中一行数据所代表的业务细节程度。粒度越细,数据越详细;粒度越粗,数据越汇总。在设计事实表之前,需要明确事实表的粒度,例如是按每笔交易记录,还是按每天的汇总数据记录。

3. 确定维度

找出与业务过程相关的所有维度,如时间、地点、产品、客户等。每个维度都有一个唯一的主键,用于关联事实表。维度表可以包含描述该维度的各种属性,如产品维度表可以包含产品名称、产品类别、产品价格等属性。

4. 确定事实

确定业务过程中的度量值,也就是事实。事实通常是数值型的,并且是可加的,例如销售金额、销售数量等。将这些事实存储在事实表中,并通过外键与维度表关联。

维度建模案例:

以电商销售业务为例,下面进行维度建模。

1. 选择业务过程

本次选择电商的销售业务作为建模的业务过程。

2. 声明粒度

事实表的粒度为订单id+产品id,即事实表中的每行数据中订单id和产品id都是不同的。

3. 确定维度

  • 时间维度:包含日期、年份、季度、月份、星期等属性。

  • 产品维度:包含产品 ID、产品名称、产品类别、产品价格等属性。

  • 客户维度:包含客户 ID、客户姓名、客户性别、客户所在地区等属性。

  • 店铺维度:包含店铺 ID、店铺名称、店铺所在地区等属性。

4. 确定事实

  • 销售金额:每笔订单的销售总金额。

  • 销售数量:每笔订单中销售的产品数量。

以下是简单的 SQL 代码示例,用于创建上述维度表和事实表:

sql

-- 创建时间维度表
CREATE TABLE time_dimension (
    date DATE,
    year INT,
    quarter INT,
    month INT,
    week INT
);

-- 创建产品维度表
CREATE TABLE product_dimension (
    product_id VARCHAR(50),
    product_name VARCHAR(100),
    product_category VARCHAR(50),
    product_price DECIMAL(10, 2)
);

-- 创建客户维度表
CREATE TABLE customer_dimension (
    customer_id VARCHAR(50),
    customer_name VARCHAR(100),
    customer_gender VARCHAR(10),
    customer_region VARCHAR(50)
);

-- 创建店铺维度表
CREATE TABLE store_dimension (
    store_id VARCHAR(50),
    store_name VARCHAR(100),
    store_region VARCHAR(50)
);

-- 创建订单事实表
CREATE TABLE sales_fact (
    order_id INT,
    product_id INT,

    order_date INT,
    customer_id INT,
    store_id INT,
    sales_amount DECIMAL(10, 2),
    sales_quantity INT
);

通过以上步骤和实例,你可以对维度建模有一个基本的了解,上面的模型是一个典型的星型模型。在实际应用中,需要根据具体的业务需求和数据特点进行灵活调整。

ER建模

概念描述:

ER建模又称为范式建模法,是由数据仓库之父Bill Inomon提出的建模理论,它基于关系数据库的设计理论,以减少数据冗余、保证数据一致性为主要目标,遵循一定的范式规则:如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。

设计步骤:

需求分析:梳理业务,明确分析需求。

实体识别:从业务中提取实体,如客户、订单、产品等。

属性定义:为每个实体定义属性,如客户的姓名、年龄、地址等。

关系确定:分析实体之间的关系,如一对一、一对多、多对多关系。

范式化处理:对数据模型进行范式化,消除数据冗余和异常。

优缺点:

优点:数据冗余小,数据一致性高,便于数据的维护和更新。

缺点:查询性能相对较低,因为需要进行大量的表连接操作;模型设计和开发的复杂度较高。

适用场景:适用于对数据一致性要求较高、数据更新频繁的场景,如在线事务处理(OLTP)系统。

ER建模案例:

以下是一个使用 ER 建模方法的数据仓库建设案例,以在线书店为例。

数据建模步骤

  1. 需求分析:与在线书店的业务人员沟通,了解他们的业务流程、数据需求和分析目标。例如,业务人员可能需要分析不同类别书籍的销售情况、客户的购买偏好等。

  2. 概念建模:根据需求分析的结果,确定实体、属性和关系。在在线书店的案例中,实体包括书籍、客户、订单和订单商品;属性是每个实体的特征,如书籍的标题、客户的姓名等;关系描述了实体之间的联系,如客户下订单、订单包含订单商品等。

  3. 逻辑建模:将概念模型转换为逻辑模型,确定表结构、字段类型和约束条件。在 ER 建模中,每个实体对应一个表,每个属性对应一个字段,关系通过外键来实现。

  4. 物理建模:根据逻辑模型,选择合适的数据库管理系统(DBMS)和存储结构,优化数据仓库的性能。例如,选择合适的索引、分区策略等。

  5. 实施和维护:创建数据库表,导入数据,并进行数据验证和测试。在数据仓库的运行过程中,定期进行数据更新和维护,确保数据的准确性和完整性。

ER 模型描述

  • 实体

    • 书籍(Books):包含书籍的基本信息,如标题、作者、价格等。

    • 客户(Customers):包含客户的基本信息,如姓名、邮箱、地址等。

    • 订单(Orders):包含订单的基本信息,如订单日期、总金额等,客户id等。

    • 订单商品(Order_Items):包含订单中的商品信息,如订单id、书籍id、数量等。

  • 关系

    • 客户 - 订单:一个客户可以下多个订单,是一对多的关系。

    • 订单商品:一个订单可以包含多本书籍,是一对多的关系。

模型设计

表名

字段

说明

Books

book_id(主键), title, author, price, publication_date, category

存储书籍的基本信息

Customers

customer_id(主键), name, email, address, registration_date

存储客户的基本信息

Orders

order_id(主键), customer_id(外键), order_date, total_amount

存储订单的基本信息,关联客户

Order_Items

order_item_id(主键), order_id(外键), book_id(外键), quantity

存储订单中的商品信息,关联订单和书籍

模型关系图:

er模型


评论