2. MES工艺路线数据模型解析
在MES系统中,工艺路线不是一张“工序清单”,而是一套以工艺路线版本为根、向下挂接工序、工步、资源与物料约束的树状数据模型。迁移失败往往不是数据搬不过去,而是没有识别出实体之间的主外键依赖与版本归属关系。理解这套模型,是后续做迁移映射、切换验证和回滚设计的前提。
一、核心实体的层级与主键约定
典型MES工艺路线模型包含六类核心实体,它们通过业务主键而非数据库自增ID建立关联,迁移时必须保留业务主键的稳定性:
- 工艺路线(Routing):业务主键通常为
RoutingCode + Version,例如RT-ASM-001 / V2。它绑定物料编码、工厂、有效期,是迁移的顶层对象。 - 工序(Operation):主键为
RoutingCode + Version + OpSeq,如OpSeq=20。工序定义工作中心、标准工时、报工方式、是否关键工序。 - 工步(Step):主键为
OpSeq + StepSeq,如20-01。工步是操作级指令,承载参数、检验点、设备程序号。 - 资源(Resource):包括设备、工装、人员技能,通过
ResourceType + ResourceCode关联到工序或工步。 - BOM与物料清单:BOM是产品结构,物料清单是BOM在具体版本下的展开结果。工序与物料的关联通过投料点(Issue Point)表达,即某物料在哪道工序投入。
- 工艺路线版本:控制生效日期与状态(草稿/发布/冻结),迁移时需明确目标版本。
这六类实体的关系可以用下面的结构图表示。注意:工序与物料之间不是直接外键,而是通过投料点这一关联实体连接,这是迁移中最容易丢失的中间层。
二、关联关系中的三个关键约束
第一,工序与物料的关联必须落在投料点上。很多迁移方案只搬了BOM和工序,却漏掉投料点,导致切换后系统不知道“这个螺丝在哪道工序装”。投料点的业务主键是 RoutingCode + Version + OpSeq + MaterialCode,迁移时要与工序、物料清单双向核对。
第二,资源绑定存在工序级与工步级两种粒度。工序级资源表示“这道工序需要某类设备”,工步级资源表示“这个动作必须用某台具体设备或某个程序号”。迁移时若把工步级资源降级为工序级,会丢失设备程序号,切换后首件就可能报错。
第三,BOM版本与工艺路线版本必须成对迁移。BOM版本决定物料清单展开结果,工艺路线版本决定工序顺序。两者版本不匹配时,投料点引用的物料可能在目标BOM中不存在。建议在迁移前建立版本配对表,例如 RT-ASM-001/V2 ↔ BOM-ASM-001/V3。
三、迁移涉及的核心数据实体清单
从迁移工程角度,需要按依赖顺序处理以下实体。下表给出实体、业务主键、依赖对象和迁移注意点,可直接作为迁移范围核对表使用:
| 实体 | 业务主键 | 依赖对象 | 迁移注意点 |
|---|---|---|---|
| 工艺路线 | RoutingCode + Version | 物料编码、工厂 | 先确认目标工厂是否存在该物料 |
| 工序 | RoutingCode + Version + OpSeq | 工艺路线、工作中心 | 工作中心编码需在目标系统存在 |
| 工步 | OpSeq + StepSeq | 工序、设备程序号 | 程序号需与设备主数据对齐 |
| 资源绑定 | ResourceType + ResourceCode + OpSeq | 工序/工步、资源主数据 | 区分工序级与工步级,不可降级 |
| BOM | BOMCode + Version | 父件、子件物料 | 与工艺路线版本配对迁移 |
| 物料清单 | BOMCode + Version + MaterialCode | BOM、物料主数据 | 替代料组需完整保留 |
| 投料点 | RoutingCode + Version + OpSeq + MaterialCode | 工序、物料清单 | 最易遗漏,需双向核对 |
四、一个可执行的迁移前核对示例
假设要把 RT-ASM-001/V2 从测试环境迁移到生产环境,目标BOM为 BOM-ASM-001/V3。迁移前可按以下顺序做一次依赖核对,示例参数如下:
-- 示例:核对投料点引用的物料是否都在目标BOM中
SELECT ip.OpSeq, ip.MaterialCode, bm.MaterialCode AS BomMaterial
FROM IssuePoint ip
LEFT JOIN BomMaterial bm
ON bm.BomCode = 'BOM-ASM-001'
AND bm.Version = 'V3'
AND bm.MaterialCode = ip.MaterialCode
WHERE ip.RoutingCode = 'RT-ASM-001'
AND ip.Version = 'V2'
AND bm.MaterialCode IS NULL;
-- 预期结果:返回0行,表示投料点物料全部命中目标BOM
-- 若返回非空,则这些物料需要先补入目标BOM或调整投料点
核对通过后,再按“工艺路线 → 工序 → 工步 → 资源绑定 → BOM → 物料清单 → 投料点”的顺序写入目标系统。每写入一层,用业务主键回查一次,确认父子关系完整。例如写入工序后,执行 SELECT COUNT(*) FROM Operation WHERE RoutingCode='RT-ASM-001' AND Version='V2',与源系统数量比对。
RoutingCode + Version,自增ID在源库和目标库必然不同。迁移映射表应以业务主键为键,否则回滚时无法定位原对象。
理解这套模型后,后续的迁移映射、切换验证和回滚设计就有了统一的坐标:任何一条数据都能回答“它属于哪个工艺路线版本、挂在哪道工序、引用哪个物料清单条目”。这也是判断迁移是否完整的最终依据。