摘要:业务本体建设不能直接从字段、指标或关系图开始。本文从企业数据建模实践出发,说明业务对象与字段、数据记录之间的区别,梳理对象类型、对象实例、属性、关系和状态的边界,并给出从业务问题反向识别核心对象的建模方法。
在建设业务本体时,很多团队会先整理数据表、字段、指标和规则,却没有先回答一个基础问题:这些信息究竟在描述谁?
数据库以表和记录保存数据,业务分析却通常围绕客户、商品、订单、设备等对象展开。业务人员关心的是某位客户为什么减少采购、某款商品为什么形成积压、某笔订单为什么尚未交付,而不是某张表中有多少字段。
因此,业务本体建模的第一步通常不是画关系图,而是识别企业需要持续管理的业务对象。
1. 对象不是字段,也不等于一条数据记录
以商品为例,它的信息可能分散在多个系统中:
- 商品主数据保存编码、名称、品类和规格;
- 库存系统记录不同仓库或门店的现存数量;
- 销售系统记录销量、金额和交易时间;
- 活动系统记录参与过的促销;
- 售后系统记录退货、换货及问题原因。
这些数据位于不同的表中,却都在描述同一个商品。只查看一张表,可以回答的问题有限;围绕商品组织这些信息后,系统才可能进一步分析库存是否合理、销量为什么变化,以及后续需要处理什么。
所以,业务本体中的对象不是某个字段,也不是任意一行数据。它表示企业需要持续认识和管理的一类业务事物。
2. 对象类型和对象实例有什么区别
建模时需要区分对象类型和对象实例。
| 概念 | 示例 | 作用 |
|---|---|---|
| 对象类型 | 客户、商品、订单、设备 | 描述一类业务事物的共同结构 |
| 对象实例 | 某家具体客户、某个商品编码、某笔订单 | 指向实际发生的业务对象 |
“商品”是一类对象,“编码为 SKU-001 的商品”是一个实例;“客户”是一类对象,某家与企业持续交易的公司是一个具体实例。
如果只定义对象类型,系统知道需要管理哪些事物,却无法定位实际问题;如果只保存对象实例,又缺少统一结构,跨系统分析和规则复用会变得困难。
3. 定义对象,先解决身份识别问题
一个对象要被系统持续使用,首先要能够被稳定识别。
同样名为“经典咖啡”的商品,可能具有不同容量、包装或规格。只按名称统计,它们容易被错误合并。反过来,同一个商品在不同系统中可能使用不同编码,也可能被误认为多个对象。
定义对象时,至少要明确:
- 哪些属性共同确定对象身份;
- 是否存在企业统一标识;
- 不同系统中的本地标识如何映射;
- 对象发生合并、拆分或版本变化时如何处理。
商品可以通过统一编码和规格识别,客户可能需要结合统一客户编号及主体信息,订单则通常依赖订单号、来源系统和版本。
对象识别不准确,后续关系、指标和规则即使定义正确,也可能作用到错误对象上。
4. 属性、关系和状态分别描述什么
确认“它是谁”以后,还要描述“它是什么样”“与谁有关”以及“当前发生了什么”。这分别对应属性、关系和状态。
4.1 属性:描述对象本身
属性记录对象的特征。例如,客户所属行业、商品规格、订单金额、设备型号都属于属性。
属性通常可以从一个对象自身读取,但仍要明确数据来源、更新时间和口径,避免不同系统对同一属性给出冲突结果。
4.2 关系:把对象放进业务网络
客户发起订单,订单包含商品,订单对应合同。关系让孤立对象形成业务路径,系统也可以沿着这些路径寻找查询和判断所需的依据。
关系不能只有一个模糊的“关联”。它还需要说明业务含义、方向、适用范围和确认依据。
4.3 状态:说明对象当前处于什么阶段
订单会经历待确认、已审批、已发货和已完成等状态;设备可能从正常运行转为异常;合同也会从待生效转为有效或失效。
状态不仅要保存当前值,还应关注状态变化时间、触发条件和来源记录。否则,系统只能看到结果,无法解释变化过程。
5. 为什么指标必须落到具体对象上
“订单金额”“交付天数”和“库存数量”都是数值,但数值脱离对象后,业务意义会迅速下降。
例如,只知道交付用时为 5 天,并不能判断它是否异常。系统还需要知道:
- 这是哪一笔订单;
- 订单属于哪个客户和商品;
- 对应哪份合同或服务要求;
- 当前订单状态是什么;
- 哪条规则适用于这类订单。
业务判断不是针对抽象数字作出的,而是针对某个对象在特定关系和状态下作出的。
这也是对象建模位于指标和规则之前的原因。对象不明确,指标可能计算到错误主体上,规则也可能被应用到不适用的范围。
6. 不是所有业务名词都要建成对象
本体建模不等于把企业中出现过的每个名词都收进去。对象越多,身份识别、关系管理和持续维护的成本越高。
判断一个概念是否需要成为对象,可以检查以下问题:
- 它是否需要被独立识别?
- 企业是否需要持续观察或管理它?
- 它是否具有自己的属性和状态?
- 它是否会与其他对象形成稳定关系?
- 查询、判断或业务动作是否会最终落到它上面?
客户需要持续观察交易变化,并由客户经理跟进,因此适合作为对象。设备需要持续监测运行指标,异常时还会生成工单,也适合作为对象。
一个仅在单次计算中产生、没有独立身份且不需要持续管理的中间结果,通常没有必要建成对象。
7. 更实用的建模方法:从业务问题反推对象
企业不必一次性梳理所有系统中的全部对象。更可行的方法,是从具体业务问题开始:
- 明确需要解决的问题;
- 找到问题最终指向的核心对象;
- 确定对象的稳定识别方式;
- 补充必要属性、关系和状态;
- 用真实查询和判断验证模型;
- 再逐步扩展其他对象和场景。
例如,要分析订单交付异常,可以先确定订单、客户、商品和合同等对象,再梳理订单状态、约定交期、实际交付时间及其关系。与当前问题无关的对象,可以后续按场景逐步加入。
总结
业务数据按系统、表和字段保存,经营问题则围绕具体对象发生。业务本体从对象开始,是为了先确定企业究竟在管理什么,再把属性、关系、状态、指标和规则组织到正确主体上。
一个可用的对象模型至少需要回答:
- 对象是谁,如何被稳定识别;
- 它具有什么属性和状态;
- 它与哪些对象发生什么关系;
- 哪些指标、规则和动作作用于它。
对象是业务本体连接数据与业务的起点。对象定义越清楚,后续关系越容易连对,指标越容易算准,业务判断也越容易落到真实、可处理的事项上。