2. 主数据概念与模型:主数据定义、主数据管理核心要素、主数据模型设计原则、与事务数据的区别
好,咱们进入第二章。这一章我打算把主数据这个概念彻底讲透。很多同学做了好几年数据工作,问起主数据是什么,能说个大概,但一到落地就含糊了。说白了,主数据就是企业里那些最核心、最基础、被多个系统反复引用的数据实体。
我当年刚接触主数据治理时,也犯过迷糊。记得有一次,我们把订单数据当主数据治理了半年,后来才发现那玩意儿是事务数据,治理思路完全不对。嗯,今天咱们就把这些坑提前填上。
2.1 主数据定义
主数据(Master Data),指的是描述企业核心业务实体的数据。这些实体通常包括:客户、产品、供应商、员工、组织、会计科目等。它们有几个共同特征:
- 跨系统共享:CRM、ERP、SCM 都在用同一套客户数据
- 相对稳定:不会像订单那样每分钟都在变
- 高价值:一旦出错,下游全崩
举个例子。你在电商平台下单,订单里有商品ID、客户ID、地址ID。这些ID背后对应的商品名称、客户姓名、地址详情,就是主数据。订单本身是事务数据,但订单引用的那些“字典”就是主数据。
核心定义:主数据是企业内跨业务领域、跨系统、被重复使用的高价值核心业务实体数据。
2.2 主数据管理核心要素
主数据管理(MDM)不是买个工具就完事了。我见过太多企业,上了 MDM 平台,结果数据还是一团糟。为什么?因为忽略了管理要素。
我个人习惯把 MDM 的核心要素归纳为五个维度:
| 维度 | 说明 | 常见问题 |
|---|---|---|
| 数据标准 | 定义统一的编码规则、命名规范、格式要求 | 各系统自己定编码,合并时乱成一锅粥 |
| 数据质量 | 完整性、准确性、一致性、及时性 | 客户姓名有空格、手机号少一位,没人管 |
| 数据生命周期 | 创建、变更、归档、销毁的全流程管控 | 离职员工数据没人清理,越积越多 |
| 数据权限 | 谁可以创建、修改、删除、查看主数据 | 业务员自己改客户等级,乱套了 |
| 数据集成 | 主数据如何在各系统间分发、同步、回写 | ERP改了供应商名称,OA还是旧的 |
这五个维度缺一不可。我曾经在一个项目中,只抓了数据标准和数据质量,忽略了生命周期和权限,结果半年后主数据仓库里堆满了僵尸数据。嗯,那教训挺深刻的。
2.3 主数据模型设计原则
模型设计是主数据治理的基石。模型设计得好,后面调度、清洗、分发都顺畅;设计得烂,后面全是补丁。
我总结了四条核心原则:
- 唯一性:每个主数据实体必须有全局唯一的标识符。别跟我说用“名称+类型”当主键,那玩意儿迟早会撞车。
- 稳定性:主数据的核心属性(如客户ID、产品编码)一旦确定,尽量不要改。改一次,下游十几个系统都要跟着改。
- 扩展性:模型要预留扩展字段或扩展机制。业务部门随时可能加一个新属性,你不能每次都改表结构。
- 可追溯性:记录每次变更的版本、时间、操作人。出了问题能回溯。
我的经验:设计主数据模型时,建议先画概念模型,再转逻辑模型,最后才落地物理模型。跳过概念模型直接建表,十有八九要返工。
举个例子,客户主数据模型。最简单的版本:
-- 客户主数据表(简化版)
CREATE TABLE md_customer (
customer_id VARCHAR(32) PRIMARY KEY, -- 全局唯一客户ID
customer_name VARCHAR(128) NOT NULL, -- 客户名称
customer_type VARCHAR(16), -- 客户类型:个人/企业
status VARCHAR(8) DEFAULT 'ACTIVE', -- 状态
source_system VARCHAR(32), -- 来源系统
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
version INT DEFAULT 1 -- 版本号,用于追溯
);
你看,这个模型虽然简单,但唯一性、稳定性、可追溯性都照顾到了。扩展性可以通过加扩展属性表来实现。
2.4 主数据与事务数据的区别
这个区别搞不清楚,治理方向就会跑偏。我见过有人把订单明细当主数据治理,也有人把产品目录当事务数据忽略。咱们用一张表说清楚:
| 对比维度 | 主数据 | 事务数据 |
|---|---|---|
| 典型代表 | 客户、产品、供应商、组织 | 订单、合同、发货单、付款记录 |
| 变化频率 | 低(周/月级变化) | 高(秒/分级变化) |
| 数据量 | 小(万级到百万级) | 大(千万级到亿级) |
| 生命周期 | 长(年为单位) | 短(月/季度归档) |
| 治理重点 | 一致性、标准化、版本管理 | 完整性、时效性、审计追溯 |
| 调度策略 | 增量同步、变更捕获、定时分发 | 批量加载、实时流处理、分区管理 |
你想想看,订单数据每秒都在产生,你不可能用治理主数据那套“先审批再变更”的流程去管它。反过来,客户数据你也不能用事务数据的“批量加载、用完即弃”的思路去处理。
避坑提醒:我曾经在一个项目中,把“合同”当成了主数据来治理。合同确实跨系统引用,但它变化频繁、量大、生命周期短,本质上是事务数据。结果我们花了三个月建模型,上线第一天就被海量数据冲垮了。后来改成事务数据治理思路,才稳住。
好,咱们用一张图来总结本章的核心知识体系:
这张图把本章的四个核心模块串起来了。从定义出发,到管理要素、设计原则,再到与事务数据的区别,层层递进。后面的章节,我们会基于这个框架,深入讲任务调度引擎如何与主数据治理结合。