数据仓库建模-CIF方法中3NF建模的核心作用解析
CIF方法中3NF建模的核心作用解析
即使各业务系统本身已采用第三范式(3NF)设计,CIF方法在构建企业数据仓库(EDW)时仍需进行3NF建模,其核心目标并非重复源系统的结构,而是解决以下问题:
1. 整合异构系统的数据模型
场景示例:
假设企业有三个业务系统:
- 销售系统(3NF):定义“客户”表(
customer_id
,name
,sales_region
)。 - CRM系统(3NF):定义“用户”表(
user_id
,email
,member_level
)。 - 财务系统(3NF):定义“账户”表(
account_no
,owner_name
,balance
)。
问题:
- 同一客户在不同系统中标识不同(
customer_id
vsuser_id
vsaccount_no
)。 - 字段命名和语义差异(
sales_region
在CRM中可能对应location
)。
CIF的3NF建模:
在EDW中创建统一的 企业级客户维度表,整合所有系统的客户数据:
CREATE TABLE dim_customer (
enterprise_customer_id INT PRIMARY KEY, -- 全局唯一标识
sales_customer_id VARCHAR(50), -- 销售系统原始ID
crm_user_id VARCHAR(50), -- CRM系统原始ID
finance_account_no VARCHAR(50), -- 财务系统原始ID
name VARCHAR(100),
email VARCHAR(100),
region VARCHAR(50),
member_level VARCHAR(20),
balance DECIMAL(18,2)
);
价值:
- 解决多系统间的 标识冲突 和 字段语义不一致。
- 提供全局唯一的客户视图,支持跨系统分析(如“高余额客户”的购买行为分析)。
2. 消除跨系统冗余
场景示例:
- 销售系统中有一个“产品”表(
product_id
,name
,category
)。 - 库存系统中也有一个“产品”表(
sku
,product_name
,warehouse_location
)。
问题:
- 同一产品在不同系统中使用不同主键(
product_id
vssku
)。 - 字段冗余(
name
和product_name
实际为同一数据)。
CIF的3NF建模:
在EDW中设计统一的 产品主表,关联所有系统的产品数据:
CREATE TABLE dim_product (
enterprise_product_id INT PRIMARY KEY, -- 全局唯一标识
sales_product_id VARCHAR(50), -- 销售系统产品ID
inventory_sku VARCHAR(50), -- 库存系统SKU
product_name VARCHAR(100),
category VARCHAR(50),
warehouse_location VARCHAR(50)
);
价值:
- 通过 主数据管理 消除冗余,确保所有系统引用同一产品定义。
- 支持跨系统查询(如“某仓库中某类产品的销售情况”)。
3. 数据清洗与标准化
场景示例:
- 销售系统中记录金额单位为“元”,保留两位小数。
- 财务系统中记录金额单位为“分”,整数存储。
CIF的3NF建模:
在EDW中统一金额单位为“分”,并增加清洗规则:
-- 销售数据清洗
INSERT INTO fact_sales (amount)
SELECT amount * 100 -- 转换为分
FROM source_sales
WHERE amount IS NOT NULL;
-- 财务数据清洗
INSERT INTO fact_finance (amount)
SELECT amount
FROM source_finance
WHERE amount >= 0; -- 过滤负值异常数据
价值:
- 统一数据格式,避免因单位差异导致分析错误。
- 提升数据质量(处理空值、异常值)。
4. 建立企业级关联关系
场景示例:
- 销售系统的“订单”表关联客户ID(
customer_id
)。 - CRM系统的“服务请求”表关联用户ID(
user_id
)。
问题:
两个系统通过不同的外键描述客户与业务的关联,导致跨系统分析困难。
CIF的3NF建模:
在EDW中通过统一维度表建立关联:
-- 事实表引用统一的客户ID
CREATE TABLE fact_order (
order_id INT PRIMARY KEY,
enterprise_customer_id INT, -- 关联dim_customer
product_id INT,
amount DECIMAL(18,2),
FOREIGN KEY (enterprise_customer_id) REFERENCES dim_customer(enterprise_customer_id)
);
价值:
- 打破系统壁垒,实现跨业务过程的关联分析(如“客户购买记录”与“服务请求次数”的关联)。
总结:CIF中3NF建模的本质
源系统3NF | CIF的EDW 3NF建模 |
---|---|
解决单一系统内的数据冗余和一致性 | 解决跨系统的数据冗余和一致性 |
服务于特定业务功能(如销售、库存) | 服务于企业级数据整合与分析 |
独立的主键和关联关系 | 统一的主键和全局关联关系 |
CIF方法中的3NF建模并非简单复制源系统结构,而是通过以下步骤实现企业级数据治理:
- 整合:将分散的异构数据模型统一为全局模型。
- 清洗:标准化数据格式、处理异常值。
- 关联:建立跨系统的数据血缘和关联关系。
- 服务:为上层应用(如BI、报表)提供高质量数据基础。
即使源系统已是3NF,EDW的3NF建模仍聚焦于 企业视角的数据整合,而非单一系统的优化。