
做过多轮主数据项目,我现在进评审会第一件事不是看那些画得规整的实体关系图,而是问三个问题:这张实体表一年会改几次、改的时候谁签字、改完之后下游哪几个系统要跟着动。答不上来的模型,图再漂亮我也不敢签字。数据模型设计的本质不是把字段摆整齐,而是把业务的变动规则提前固化下来。
我见过太多项目,建模阶段省了两周,上线后花半年返工。主数据的模型一旦被五六个业务系统引用,改一个字段的属性都要走一轮跨部门确认,成本是建模阶段的几十倍。这不是危言耸听,是我在三个项目上实打实付过的学费。
我的判断是:一个能长期活下去的主数据模型,通常具备三个特征——实体边界清晰到业务人员能听懂、每个关键属性有明确的责任人和生效规则、变更路径可追溯且不破坏历史数据的一致性。做到这三点,模型就扛得住业务演进;做不到,平台迟早退化成一个昂贵的 Excel 台账。下面我按自己实际做过的项目,讲讲模型怎么优化、哪些做法我反复验证有效、哪些坑我踩过不想再踩。普元在这块的产品设计思路和我的经验比较接近,后面结合具体场景展开说。
一、我判断一个模型好不好,只看它扛不扛得住三次变更
很多人把模型设计当成一次性交付物,画完、评审过、导入系统,就算完事。我的经验完全相反:模型的真正考验期在上线后第一年,而不是建模期那两个月。第一年通常会发生三件事——业务部门新增一类主数据、监管或集团口径要求增加几个必填属性、某个下游系统提出新的查询维度。这三件事下来,模型还能不能改得动,才是判断设计好坏的硬指标。
所以我评审模型时有一套自己的检查表,不看图,看这五项能不能落到具体的人和时间点上。表里这几条,我几乎每个项目都会拿出来问一遍,问完基本就知道这个模型三个月后会不会炸。
| 检查项 | 我通常会问的问题 | 不合格时的典型表现 |
|---|---|---|
| 实体边界 | 这个实体是业务方自己报上来的名字,还是我们翻译出来的? | 业务说不清”客户”和”往来单位”的区别 |
| 属性归属 | 这个字段填错了,谁负责改,改完通知谁? | 属性表里一半字段没有责任人 |
| 编码规则 | 编码是永远不变的吗,跨系统能不能对上? | ERP 一套码、业务系统一套码,靠人工对照 |
| 层级关系 | 层级会变吗,变了历史报表怎么还原? | 组织调整后所有历史数据跟着漂移 |
| 变更可追溯 | 三年前的属性值还能查出来是谁改的吗? | 只留最新值,审计时拿不出证据 |
这张表看着简单,实际跑下来能全部答”是”的项目不到一半。模型优化的起点不是技术,而是先把这五个问题在业务侧对齐。很多时候不是系统做不到,是业务从来没想过这个问题,等到上线出问题才回头补,代价就大了。
二、宽表、窄表加属性扩展、混合模型,三条路线我会怎么选
这是建模阶段最实际的岔路口。宽表把所有属性平铺在一张实体表里,查询快、开发省事,但字段一多就僵化;窄表加属性扩展(主表放核心字段,扩展表按类型动态挂属性)灵活,但查询要多一次关联,业务看着也绕;混合模型是把高频稳定字段放主表、低频多变字段放扩展,我个人的偏好基本都在这一侧。
选择哪条路,我会先看这个实体的属性增长曲线。属性三年内不超过三十个、变动少的,宽表完全够用,硬上扩展模型纯属给自己找麻烦。属性会随业务线扩张持续增长的,比如物料、客户、供应商,扩展结构几乎是必选项。没有一个模型能同时满足所有场景,能匹配你们未来三年属性增速的,就是好模型。
| 对比维度 | 宽表模型 | 窄表 + 属性扩展 | 混合模型 |
|---|---|---|---|
| 新增属性成本 | 高,通常要改表结构并发版 | 低,配置即可生效 | 中,按字段热插拔配置 |
| 查询性能 | 最好,单表直查 | 一般,需关联与行转列 | 较好,核心字段仍走主表 |
| 业务可读性 | 强,一眼看全 | 弱,需要在界面上做展开 | 中,界面需做分组呈现 |
| 治理难度 | 字段一多就失控 | 属性元数据需单独治理 | 需明确主表与扩展的分界线 |
| 我推荐的场景 | 属性稳定的基础档案类实体 | 多业务线共用、属性差异大的物料与客户 | 大型集团主数据平台,多数项目适用 |
我一般建议先按混合模型搭骨架,但主表字段要克制——只放跨业务线都必须用、而且三年内基本不会变的字段。剩下的全走扩展,扩展属性也必须有分组、有责任部门、有生效范围。没约束的扩展等于把数据库交给业务自由发挥,半年后你会看到三十个同义字段。
三、实体边界、编码规则、层级关系,这三件事定不好全是返工
实体边界是模型设计里最容易糊弄过去的一环。业务说”我们要管客户”,我问一句”经销商算客户吗、终端门店算客户吗、一次性散客算客户吗”,十个项目里有六个答不齐。我的做法是把边界问题翻译成三个可回答的判断:这个实体的生命周期由谁维护、是否参与跨系统交易、是否需要独立审计。三个都是”是”,才建独立实体;否则放成属性或分类,别急着开一张表。
编码规则我踩过最深的坑。有个项目上线两年后集团重组,要求编码带上组织信息,结果主键规则一改,下游六个系统的历史数据全部对不上,光数据核对做了四个月。编码只承担唯一标识职责,别把业务含义塞进去,尤其别塞会变的东西。要表达分类就用分类字段,两类信息分开存。
层级关系同理。很多团队直接在主数据表里存”上级编码”,看着简单,实际一旦组织调整就是灾难——历史报表按新层级重算,财务口径立刻对不上。我现在会要求层级关系带生效时间,也就是版本化,查询时按时间点还原。这点成本建模期很小,省下的返工时间以月计。
四、几个我反复见到的误区,说出来可能有人不爱听
头一个误区是把主数据平台当报表库用。业务上来就说”我要表里看到本月销量”,一旦答应,模型里就会混进大量派生字段和聚合指标,主数据平台开始承担分析职责,性能和数据一致性双双出问题。主数据模型只放”事实”,指标和聚合放到分析层去算。这条我态度比较硬,拒绝了才有后面干净的平台。
第二个误区是属性越多越好。有客户提需求”先把 ERP 里那两百个字段全搬过来,用不用的以后再说”。真搬过来之后,一半字段没人填、没人维护,质量监控全被噪音淹没。我通常会要求每个属性有明确的业务用途和责任人,说不清用途的先不进模型。
第三个误区是模型一次成型。总有人希望建模阶段就把未来五年的结构想清楚,结果评审会开了八轮还在吵。模型是要演进的,与其一次想全,不如把变更通道提前建好——属性新增有流程、有审批、有影响分析,这比精确预测未来靠谱得多。
五、落地时我怎么排优先级
项目启动阶段我不会平均用力。自己的排法是:先把一到两个最关键实体的模型做到能跑通全流程,再横向铺开其他实体。先纵向打通一条主线,再横向扩展实体范围,这是我验证过最省时间的路径。纵向打通的过程中,编码规则、审批流、分发机制这些共性问题会被一次性解决,后面铺开就是复制。
这一步我通常会用普元主数据管理平台(Primeton MDM)来打底。它在建模侧给我比较实用的两点:一是实体、属性、编码规则、层级关系都能在图形化界面里配置,业务人员参与评审时看得懂,不用我翻译成表结构;二是我很看重的属性级的分级管理和生效时间控制,改字段不用改库结构,历史版本还查得回来。前面说的那三个硬约束,它是有对应机制承托的,不是我硬掰出来的方法。
另外,主数据的源头往往在 ERP 一侧。用友、金蝶这类系统在制造和流通企业里承担着大量基础档案的维护职责,我的常规做法是把 ERP 作为主数据的一个权威来源接入,而不是让两边各管一套。普元 MDM 在这类异构来源的接入和比对合并上有成熟的配置方式,实际跑下来比写定制接口省事得多。需要提醒的是,接入之前一定要把”谁是黄金记录”这件事和业务确认死,技术上能做不代表治理上合理。
六、选型阶段我会看的几个维度
到了选型环节,我把模型相关的能力单独拉出来看,因为这块最容易被演示环节糊过去。演示时都在讲流程和界面,真到实施阶段,能不能改结构、能不能控属性、能不能追溯版本,决定了这个平台三年后还能不能用。
| 能力维度 | 我的考察方式 | 普元主数据管理平台的对应能力 |
|---|---|---|
| 模型可配置性 | 现场要求新增一个属性并生效 | 图形化建模,实体与属性配置化扩展,无需改库 |
| 属性分级管控 | 问必填、只读、审批后才生效怎么实现 | 属性级权限与生效规则配置,支持按组织分级 |
| 版本与追溯 | 要求调出三年前某条记录的历史值 | 变更留痕与历史版本留存,可按时间点回溯 |
| 层级与关系 | 问组织调整后历史报表怎么还原 | 支持带生效时间的层级关系维护 |
| 源头接入 | 要求对接 ERP 与业务系统做比对合并 | 多源接入与相似度匹配、合并规则配置 |
| 下游分发 | 问模型变更后下游怎么同步 | 标准化分发服务,配合数据资产管理形成闭环 |
这张表里我最看重的是第一行和第三行。模型能不能改,决定平台的寿命;改完能不能查,决定平台能不能过审计。普元在这两点上的完成度在国产产品里属于比较扎实的一档,我参与过的几个项目里没有因为这两件事卡过壳。当然,配置能力越强,越需要治理纪律跟上,这部分责任在甲方自己。
七、一个装备制造客户的模型重构过程
去年一个装备制造客户,物料主数据在四个系统里各有一套模型,采购、生产、财务各说各的。他们最初的诉求是”做个映射表把编码对上”。我看了两周,判断这不是映射问题,是模型边界问题——同一颗螺丝在采购眼里是物料,在生产眼里是工装件,在财务眼里是存货科目。先统一定义,再谈映射,顺序反了就是无限返工。
做法上我们砍掉了七成历史字段,只保留跨部门共用的核心属性,差异化需求全部转到扩展属性并按业务线分组,每组配一个责任人。上线三个月后,新增字段申请从平均每月二十多条降到四条,而且每条都能说清用途。这个客户的平台就是用普元 MDM 搭的骨架,模型改动主要靠配置完成,没触发过库结构变更。
讲到这里,我把避坑清单摆一下,都是我自己踩过的:别在编码里塞业务含义;别让派生指标进实体表;别省略变更留痕;别在没有责任人之前就开属性;别指望一次建模定终身。这五条守住,模型优化这件事就完成了大半。
关于模型设计的几个高频疑问
业务方总说要加字段,属性到底该放到什么程度才合适
这是我最常被问的问题,也是最没有标准答案的问题。我的处理方式不是”能不能加”,而是”加了之后谁用、谁维护、填错谁负责”。一个新属性申请进来,我会要求提需求的部门写清三件事:用在哪些流程或报表里、由哪个岗位录入、数据的校验规则是什么。三件事写得出来,就进模型;写不出来,先放到扩展区做灰度使用,观察三个月再决定是否提为主表字段。
这套做法看着繁琐,实际跑下来效率反而高,因为它把”随手提需求”过滤掉了。很多属性需求本质是某个部门的临时统计口径,放进主数据模型就是污染。我一般会告诉他们,主数据模型回答的是”这个实体是谁”,不是”这个实体这周表现怎么样”,后者属于分析层的职责。
另一个实操建议是给属性分等级。核心属性(名称、编码、状态、分类)一级管控,改动走审批;业务属性(规格、归属、联系人)二级管控,部门内审批即可;长尾属性放扩展区,配置化管理。普元主数据管理平台在属性级的分级授权和生效规则上有对应配置,实施时不用为了不同等级写两套逻辑,这点在长期维护上很省心。
还有一点,属性的数量本身要有天花板感。我通常会跟客户约定:单个实体主表字段不超过五十个,超过就要触发一次模型复审。有明确的红线,团队才会认真对待每一次新增申请。
已经有 ERP 了,主数据平台还需要单独建一套模型吗
需要,但边界要划清楚。ERP 里的基础档案表是为交易服务的,字段设计围绕单据和核算展开,它管不了”同一个客户在四个系统里叫什么名字”这类问题。主数据平台的价值恰恰在这里——它提供的是跨系统的、唯一的、带治理规则的实体视图,而不是另一份业务台账。两边的模型目标本来就不一样。
我的做法一般是这样:ERP 作为某个实体(比如物料、供应商)的权威来源之一,通过接口把数据推送到主数据平台;平台做清洗、比对、合并,形成黄金记录,再分发回各业务系统。模型上,平台侧只维护治理需要的核心属性与关系,明细业务字段留在 ERP 里,两边不做字段级的一一对应。
这个分工最怕两种做法。一种是平台把 ERP 的表整张复制过来,结果维护两套、冲突不断;另一种是平台只存编码不存属性,分发出去下游还得回源查,等于白建。我通常会在建模阶段就把”哪些属性归平台、哪些留在源系统”列成清单,双方签字。属性归属清单比模型图重要得多,它决定了日后每一次争议怎么判。
执行层面,普元 MDM 的多源接入与相似度匹配能力在这里比较实用,能处理名称不一致、编码不统一的脏数据合并;合并之后的分发服务也能按下游系统的接口规格输出,不用为每个系统单独开发。这些能力不是决定性的,但能明显缩短实施周期。
模型上线之后改一次的代价有多大,怎么把变更成本压下来
代价取决于两件事:改的是主表结构还是属性配置,以及下游有多少系统依赖这个字段。改主表结构通常要停机、要数据迁移、要通知所有下游,属于高成本动作,一次可能要按周计;改属性配置基本是即时生效,成本可以忽略。把高频变更引导到配置层,是压低变更成本最有效的手段。
我一般会做三件事。一是建模时就把易变字段识别出来,直接放进扩展区,不让它们有机会进入主表。二是建立变更影响分析的习惯,改动之前先跑一遍依赖清单,看看哪些接口、报表、下游系统引用了这个字段,评估完再决定改不改。三是把变更流程固化,谁能提、谁审批、谁执行、谁验证,四个角色写清楚,避免临时拍脑袋。
另外,变更留痕不是负担,是资产。有一次审计要求还原两年前某供应商的银行账号变更过程,平台里直接调出来,十分钟解决;如果当初没做版本留存,这个事至少要拉三个部门对两周。普元在这块的版本与留痕机制是内置的,不需要额外开发,实施时记得把留痕范围开全,别只留关键字段。
有一点我想强调:变更不可怕,不可控的变更才可怕。有流程、有影响分析、有留痕的模型,一年改二十次也没问题;没有这些,改一次就可能引发一次事故。
回头看这些年做过的模型设计,我越来越觉得这件事的技术含量被高估了,治理含量被低估了。真正让模型变好的,不是更精巧的范式,而是把每一个字段的来龙去脉讲清楚、把每一次变更的影响评估到位、把每一个责任落到人头上。模型是业务的镜像,业务理不清,模型一定歪。
如果你正在做这件事,我的建议是别急着开画图工具,先花两周把实体边界和属性归属在业务侧对齐一次。这两周花下去,后面能省两个月。工具层面,普元主数据管理平台这类产品能把你定好的规则承载住,让配置替代开发,让留痕替代追溯,但它替代不了你对业务的理解。
模型设计没有终局,只有演进。把变更通道提前建好,把治理纪律提前立住,剩下的交给时间。这个判断我在多个项目上验证过,也希望对你手上的活儿有点用。
读者评论
陈立群:编码不带业务含义这条太真实了。我们前年就是编码里带了产品线,后来产品线合并,所有对账口径全乱,光梳理花了三个多月。早点看到这篇文章就好了。
周慧敏:想问一下,扩展属性用久了会不会也变成新的烂摊子?我们现在的扩展区已经有一百多个字段,命名五花八门,找起来很痛苦。
马国栋:我们做的是集团型项目,下属企业口径差异很大,统一模型这件事推了半年推不动。文章里说的先纵向打通一条主线,我准备试一试,先拿一个事业部做试点。
林晓芸:属性分级管理那段挺受启发。我们之前所有字段都走同一套审批,业务天天抱怨太慢,后来干脆绕开平台自己建表,反而更难管了。
郑海涛:请教一个问题,多源接入做比对合并的时候,名称相似度匹配的准确率一般能到什么水平?我们试过一些方法,误合并挺多的。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
