ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

制造业ERP数据库设计:解析MPS/MRP/CRP核心表结构

制造业ERP数据库设计:解析MPS/MRP/CRP核心表结构 简介面向ERP系统学习与开发者的数据库表结构参考文档覆盖销售预测、销售订单、主生产计划MPS、物料需求计划MRP、物料清单、工作中心、工艺路线、能力需求计划、采购、库存、车间任务等核心模块并涵盖报表生成与查询、界面输入等完整功能菜单。文档详细列出各数据表的字段定义如物料编码、物料名称、安全库存量、批量规则、计划展望期、需求时界、计划时界、提前期、合格率、可用库存量、净需求量、计划产出量、可供销售量等同时梳理主表与从表、界面输入表之间的对应关系可帮助理解ERP从销售预测到生产计划再到采购库存的完整数据流适合课程设计、毕业设计或系统开发前期的数据库建模参考。压缩包内含1个doc文件整体大小约30KB打开即可阅读。已有480人学习查看兼具实用性与参考价值。1. 一份ERP数据库设计文档从销售预测到库存盘点的近二十张核心表这份ERP数据库设计文档最值钱的地方不是它有多少张表而是它把制造企业里最难设计的MPS主生产计划、MRP物料需求计划、CRP能力需求计划这三套计划体系连同销售、采购、生产、库存十几张核心表的字段一次给全了。做过ERP相关项目的人都知道进销存单据表好设计一到计划类报表就容易卡壳时区时段怎么切、毛需求净需求怎么算、主表和从表怎么分工没有一个现成的字段级参考光靠自己想非常容易翻车。这份文档正好能把这块补上。适合正在做制造业信息化项目、需要做数据库课程设计或者想从零搭一套ERP原型结构的人参考照着设计。2. 数据主线怎么走从销售预测、销售订单到MPS、MRP的字段流转拿到这份文档第一件事不是看字段而是先把它的业务主线捋出来。因为这份文档里每一个菜单、每一张表都不是孤立的它们之间是按“预测→计划→执行→库存”的顺序串起来的。2.1 先看懂业务主线七个阶段、十几张表构成一张网我把文档里的核心表按业务阶段整理了一下这张表基本就是制造业ERP的骨架业务阶段入口菜单核心表输出销售预测销售管理销售预测单预测量、预测日期区间销售接单销售管理销售订单订单量、交货日期、客户主生产计划MPS管理MPS报表主表、从表计划产出量、计划投入量物料需求MRP管理MRP报表主表、从表、物料清单净需求量、采购/加工建议能力校验CRP管理能力需求计划报表、工作中心、工艺路线负荷量、能力负荷差采购执行采购管理采购申请单、采购订单采购数量、到货日期生产执行生产管理车间任务单、加工单/派工单开工/完工日期库存闭环库存管理入库单、出库单、库存盘点单库存数量、盈亏金额顺着这张表看业务的源头是销售预测单和销售订单。销售预测给的是未来一段时间的预测量销售订单给的是已经确认的订单量。MPS报表生成时主表提供物料级的计划参数从表按时间段展开数量算完主生产计划再靠物料清单一层层展开成MRP的净需求最后落到采购申请和生产任务。CRP则用工作中心、工艺路线这两个数据维护表里的产能数据反过来校验计划排得合不合理。整条链路闭环且每张单据都能往上下游追溯。2.2 主表与从表为什么非要拆成两张文档里MPS和MRP都设计了报表主表和报表从表这是整个数据库设计里最值得学习的地方。先说主表它的字段是物料编码、物料名称、安全库存量、前期库存量、批量规则、批量、计划展望期、需求时界、计划时界、提前期、合格率、计划员编码、计划编制日期。这些字段有一个共同特点它们都是“一个物料一行”的静态参数描述这个物料怎么备料、怎么排产。从表则完全不同它的字段是时区、时段、日期、预测量、订单量、毛需求量、计划接受量、可用库存量、净需求量、计划产出量、计划投入量、可供销售量这些字段是“一个物料一行可以拆成N个时段”的动态数字。主表和从表分离是ERP计划类报表的标准做法。MPS生成时先读主表拿到物料参数然后按计划展望期把时间轴切成若干时段写入从表一个物料对应多行时段记录。这样设计有两个明显好处一是查询的时候主表连从表一次就能把物料参数和时段数据都带出来二是统计报表的时候按从表的时区、时段字段做分组聚合非常方便不需要在主表里反复折腾。做数据库设计时如果图省事把主表和从表合成一张宽表时段一多字段冗余和更新异常立刻就来了。2.3 界面输入与报表字段共用MRP怎么复用MPS的字段文档里有一处细节容易被忽略MRP界面输入的物料需求计划报表主表字段都包含在主生产计划报表主表里MRP从表的字段也都包含在MPS从表里。也就是说设计者没有为MRP单独再造一套表而是直接复用了MPS的主表和从表只是在界面输入层做了字段裁剪。MRP主表只暴露物料编码、物料名称、安全库存量、批量规则、批量、计划展望期、提前期、合格率、计划员编码、计划编制日期这些物料级参数把前期库存量、需求时界、计划时界这几个MPS特有的字段藏掉了从表也只在界面上保留时段、日期、毛需求量、计划接受量、可用库存量、净需求量、计划产出量、计划投入量把预测量、订单量、可供销售量这些MPS视角的字段隐藏掉。这个做法在物理表层面很有价值MRP和MPS共用一套主从表数据维护成本低同一套物料档案不需要在两个模块里各存一份。但这也带来一个隐患MPS和MRP共用物理表后两套菜单写同一张表如果角色权限和操作范围控制不到位很容易串数据。常见做法是主表加一个“计划类型”字段区分MPS和MRP或者在应用层为不同角色配置字段级权限比如MRP操作界面里把需求时界、计划时界设置为只读防止计划员在MRP界面误改MPS参数。这一块我会在避坑章节里详细展开。3. MPS与MRP的关键参数展望期、时界、批量规则定不对计划全是噪声很多照着这份文档做数据库设计的人表建好了、字段填上了但MPS报表生成出来就是不对。问题往往不在表结构而在主表里那三个时间参数和一个数量参数没搞清楚。这一章把它们的含义和推算顺序掰开讲透。3.1 计划展望期、需求时界、计划时界三个时段参数的真实含义MPS主表里的计划展望期、需求时界、计划时界是一组联动的时间参数它们直接决定了从表里时段怎么切、预测量和订单量各起什么作用。参数含义一般取值影响计划展望期MPS计划覆盖的总时长30到90天决定从表要展开多少个时段需求时界该时间点以内只认订单量等于关键物料累计提前期需求时界内预测不参与计算计划时界该时间点以内计划冻结一周左右时界内不允许随意调整计划需求时界是最容易理解错的参数。它的逻辑是在需求时界以内的日期MPS只认销售订单量不再看预测单的预测量在需求时界以外的日期预测量和订单量取较大值参与计算。原因是需求时界内的需求已经临近交付预测已经没有意义只能以客户确认的订单为准。如果把需求时界设成0或者不维护MPS就会把预测单里所有的预测量全部当成硬需求计划产出量被顶得很高采购也跟着多买这是最典型的翻车场景。计划时界则是给计划一个冻结窗口窗口内不轻易调整避免计划员反复改计划导致车间和采购无所适从。3.2 毛需求、净需求、计划产出与投入从表字段的推算顺序MPS报表从表里的字段不是让人随便填的它们之间存在严格的递推关系。常见做法是按下面的顺序计算这个顺序也是报表生成程序的主逻辑第一步确定毛需求量。需求时界内取订单量需求时界外取预测量与订单量较大值填入从表的毛需求量字段。第二步计算可用库存量。可用库存量等于前期库存量加计划接受量再减去毛需求量。注意这里的前期库存量来自主表计划接受量来自从表同一时段或上一时段。第三步计算净需求量。净需求量等于毛需求量减去前期库存量减去计划接受量再加上安全库存量。如果结算结果小于等于0净需求量按0处理。第四步按批量规则调整。净需求量不是最终的计划产出量要按主表里的批量规则和批量值向上取整得到计划产出量。第五步按提前期倒推计划投入量。计划投入日期等于计划产出日期减去提前期计划投入量等于计划产出量除以合格率。合格率这个字段在这里就开始起作用。我举个例子。某物料毛需求量是120前期库存量是20计划接受量是30安全库存量是10。净需求量等于120减去20减去30再加上10结果是80。假设主表批量规则是固定批量、批量为100那计划产出量就不是80而是100。如果合格率是95%计划投入量就等于100除以0.95约等于105.27然后把这个数量排到产出日期往前推提前期的那一天。主表里的合格率字段看似不起眼到了这个计算环节数量差就出来了。3.3 批量规则与均化类型小字段决定计划是平顺还是剧烈波动MPS主表里的批量规则常见有直接批量、固定批量、期间批量三种。直接批量是净需求多少就产出多少适合单价高、加工费占比大的物料固定批量是每次都按一个固定数量投产适合模具、热处理这类有最小起订量的工序期间批量是把某一段时间内的净需求合并成一批适合需求相对平稳的物料。如果批量规则不初始化全部走直接批量计划产出量会跟着净需求剧烈跳动今天排80件、明天断供、后天又排120件供应商和车间都没法干活。销售预测单里有个均化类型字段同样影响MPS的毛需求分布。均化类型的含义是预测数量在起始日期到结束日期这个区间内怎么摊开。常见做法有按日均化、按周均化、按月均化。举例来说预测数量是300起始日期到结束日期一共30天按日均化就是每天10。如果均化类型设置不对300全部落在起始日期这一天毛需求量第一天就爆出一个大尖峰MPS会为了让这一天产能跟上而排出一大笔计划投入后面的时段反而空着。这个字段和计划展望期配合着用才能让预测需求在时间轴上平顺展开。4. 从计划到执行工艺路线、工作中心、CRP能力校验与工单拆解计划算完只是第一步能不能落地还要看产能和工序。这份文档里工作中心信息表、工艺路线表、能力需求计划报表、车间任务单、加工单和派工单就是干这件事的。这一章讲清楚这几张表怎么联动。4.1 工作中心与工艺路线能力数据从哪来工作中心信息表的字段是工作中心代码、工作中心名称、车间代码、班次、每班小时数、每班平均人数、设备数。这是典型的产能主数据。一个工作中心的有效产能常见计算公式是班次乘以每班小时数乘以每班平均人数再乘以设备数。比如一个工作中心一天2班、每班8小时、每班平均2人、4台设备日产能就是2乘8乘2乘4等于128工时。这里的人员和设备是并行系数如果设备是自动化的人员只是看管那每班平均人数可以按设备数的比例折算。工作中心信息表里的班次和每班小时数是CRP报表里“加工能力”字段的数据来源。工艺路线表的字段是物料号、工序号、工序名称、工作中心名称、加工时间单位、加工时间。这张表描述的是“这个物料按什么顺序经过哪些工作中心、每道工序花多长时间”。物料号关联到物料主数据工序号决定加工顺序工作中心名称关联到工作中心信息表加工时间单位这个字段特别容易被忽略。如果一条工艺路线里有的工序加工时间单位是小时有的工序是分钟到了CRP计算环节负荷量会成倍出错。后面避坑章节我会专门讲这个坑。4.2 CRP报表的负荷计算方式与字段口径能力需求计划报表的字段是工作中心代码、时段、日期、负荷量、加工能力、能力负荷差、累计能力负荷差。负荷量是把MPS/MRP算出来的计划投入量套到工艺路线上展开得到的。展开逻辑是每个物料在某个时段的计划投入量乘以该物料各道工序的加工时间然后把同一个工作中心下所有物料的负荷累加起来得到这个工作中心在该时段的负荷量。加工能力则是工作中心信息表算出来的有效产能。能力负荷差等于加工能力减去负荷量负值表示超载正值表示有富余。累计能力负荷差是从第一个时段到当前时段的逐段累加用来判断整个展望期内这个工作中心是持续超载还是阶段性超载。CRP的计算只看两点就够一是负荷量不能超过加工能力二是累计能力负荷差不能长期为负。实际跑CRP报表时通常先把MPS/MRP的产出计划按提前期展开到每个时段再按物料关联工艺路线按工作中心聚合负荷。文档里CRP管理菜单只有CRP报表生成和CRP报表查询没有单独的CRP基本信息表说明CRP的输入完全复用MPS/MRP的计划数据和数据维护里的工作中心、工艺路线数据。这也符合常规设计能力需求计划本来就不该有自己独立的业务单据它就是计划和产能两张数据碰出来的校验结果。4.3 车间任务单、加工单、派工单三级工单的拆解逻辑生产管理菜单里的车间任务单、加工单/派工单是计划落到车间现场的三个层次。车间任务单的字段是任务编码、物料编码、物料名称、计划开工日期、计划完工日期、车间代码。它回答的问题是“做什么、做多少、什么时候做完、在哪个车间做”。加工单和派工单则进一步细化到工序级字段是物料编码、物料名称、工序号、工作中心代码、计划开工日期、计划完工日期、优先级、实际完工日期。加工单可以看成任务单拆出来的第一道工序派工单是加工单再往工作中心分配。优先级字段一般是数字数字越小越先排产这个字段在工单积压时特别有用。实际完工日期这个字段很关键。它表面上是记录一道工序什么时候干完实际上是生产完工管理的反馈入口。车间报工的时候实际完工日期一填系统就能据此更新库存和后续工序的计划开工日期。如果数据库设计时漏掉这个字段整个生产执行链路就断了。我在做类似项目时一般会在加工单/派工单上额外加上合格数量、报废数量两个字段用于完工入库和成本核算这份文档虽然没有列出来但实际落地时值得补上。4.4 采购请购、出入库与盘点单据状态怎么留采购管理菜单里生成请购单对应采购申请单采购订单管理对应采购订单采购到货管理则对应采购订单里的计划到货日期和实际到货日期。采购申请单的字段是物料编码、物料名称、规格型号、计量单位、数量、单价、金额、需求日期、申请部门、业务员、申请日期。这里的需求日期很关键它应该直接来源于MRP算出来的净需求日期否则采购容易买早了或买晚了。采购订单比采购申请单多了计划到货日期、实际到货日期、订购日期、客户名称。采购订单里带客户名称常见于受托加工或者直发客户的场景普通采购下单时这个字段留空即可这说明文档里的字段设计是宽口径的宁可多放几个字段给特殊业务用也不让流程跑一半缺字段。库存管理菜单的入库单、出库单、库存盘点单是业务闭环的最后一段。入库单的入库类型是产品入库、原材料入库、在制品入库三类出库单的出库类型是产品销售、原材料领料、在制品领料三类。这两张单据结构几乎一样都是单号、日期、类型、仓库、物料、数量、单价、金额区别只在类型字段的枚举值。库存盘点单则用账面数量、账面金额和实际数量、实际金额算出盈亏数量、盈亏金额。盘点时最怕边盘点边出入库数据一直在变所以通常的做法是盘点前冻结库存盘点单上记录盘点日期以盘点日期为界区分账务。5. 避坑计划对不上、BOM重复计算、能力负荷为负的五个真因这一章把我在实际用这类ERP表结构时遇到过的五类高发问题列出来每一条都是踩过坑才总结出来的。5.1 时界设置不当MPS算出大量无效预测需求现象MPS报表生成后计划产出量明显偏高采购申请单数量也跟着失控而车间实际根本没有那么多订单。 原因需求时界没有维护或者设成了0。需求时界的本意是时界以内只认销售订单、不认预测设成0后系统把所有预测需求全部当成有效需求参与计算等于把预测单当成了订单单。 解决把需求时界设为关键物料的最长累计提前期比如采购周期最久的原材料需要30天需求时界就设30天。计划时界设成一周左右的冻结窗口窗口内不允许计划员随意改计划。代码里判断逻辑要写清楚日期在需求时界内取订单量日期在需求时界外取预测量与订单量的较大值。5.2 批量规则空白净需求等于毛需求计划投入量乱跳现象净需求80计划产出量也是80没有按批量合并。生产订单忽多忽少供应商没法提前备料。 原因MPS主表里的批量规则字段为空或者默认了直接批量。直接批量意味着净需求多少就产出多少系统不帮你做任何数量合并。 解决上线前把物料主数据里的批量规则初始化一遍。固定批量适合有最小起订量的工序期间批量适合需求平稳的物料。建表时给批量规则字段设一个非空默认值比如默认直接批量避免出现NULL值更推荐在上线数据准备阶段按物料分类把批量规则和批量值一次配好。5.3 BOM层次号手填MRP展开低层码错乱重复计算现象同一个物料在A产品的BOM里是第1层在B产品的BOM里是第3层MRP展开时这个物料的需求被重复计算或者展开深度错乱。 原因物料清单表里的层次号被当成人工录入字段了。层次号的正确语义是低层码即该物料在所有BOM结构中出现的最低层数它应该由系统按母件展开深度自动计算人工手填必错。 解决插入BOM记录时系统先算母件自身展开到该物料的最深层级再把其写进层次号字段。层次号只是MRP展开时用来控制展开顺序的辅助字段不应该设计成可人工维护的输入项。这个坑在数据维护菜单录入物料清单表时特别容易踩录入人员图省事随便填个1后期计划就乱了。5.4 加工时间单位混用CRP负荷量虚高能力负荷差永远为负现象能力需求计划报表跑出来后工作中心的能力负荷差长期为负报表显示天天超载但车间实际产能是富余的。 原因工艺路线表里的加工时间单位字段没有被统一。一条工艺路线里第一道工序写的是小时、第二道工序写的是分钟CRP计算负荷量时没做单位换算直接把数字累加负荷量就会虚高好几倍。 解决工艺路线录入界面强制加工时间单位统一为小时或者做一道单位折算逻辑分钟除以60换成小时后再参与负荷量计算。建议在全流程上线前跑一次工艺路线数据检查把加工时间单位不一致的工艺路线全部捞出来整改这个动作我每次做项目都会强制执行。5.5 MPS与MRP共用主表两套菜单写同一张表查询结果串数据现象MPS报表查询结果里混着MRP的数据或者计划员在MRP界面改物料参数MPS的计划跟着变了。 原因文档里MRP界面输入的物料需求计划报表主表字段包含在MPS主表里物理上共用一张表是省事了但两套菜单都往同一张表里写缺少区分标识和字段级权限控制。 解决给MPS主表增加一个“计划类型”字段MPS菜单和MRP菜单分别按计划类型读写数据同时对MRP操作界面做字段级权限控制把需求时界、计划时界、前期库存量这些MPS特有的参数置灰只读防止MRP界面误改MPS数据。如果项目里有多套角色同时在线操作建议再补充操作日志表记录谁在什么时间改了哪个计划参数方便事后排查。6. 落地技巧先把物料主数据定住再动计划单据拿到这份文档想快速落地最容易踩的坑是上来就建MPS主表、MRS从表建完发现物料基础数据没定所有计划报表都是脏数据。我的习惯是先做物料主数据。为什么先把物料主数据定住因为整份文档里几乎每张表都以物料编码为关联键。销售预测单、销售订单、MPS主表、物料清单、采购申请单、生产任务单全部挂物料编码。物料编码的规则、长度、是否大写了一乱全乱。物料主数据表建议按下面的结构建CREATE TABLE t_material ( material_code VARCHAR(20) NOT NULL COMMENT 物料编码, material_name VARCHAR(100) NOT NULL COMMENT 物料名称, spec_model VARCHAR(100) COMMENT 规格型号, unit VARCHAR(10) NOT NULL COMMENT 计量单位, safety_stock DECIMAL(18,3) DEFAULT 0 COMMENT 安全库存量, batch_rule TINYINT DEFAULT 0 COMMENT 批量规则0直接 1固定 2期间, batch_qty DECIMAL(18,3) DEFAULT 0 COMMENT 批量, lead_time INT DEFAULT 0 COMMENT 提前期单位天, yield_rate DECIMAL(5,4) DEFAULT 1 COMMENT 合格率0.95表示95%, planner_code VARCHAR(20) COMMENT 计划员编码, PRIMARY KEY (material_code) ) COMMENT 物料主数据表;这段SQL里的几个细节是长期积累下来的习惯。物料编码用VARCHAR(20)而不是直接主键用自增ID因为业务上要求物料编码可读、可追溯20个字符足够覆盖绝大部分制造企业的编码规则。计量单位用VARCHAR(10)避免出现太长的单位描述。安全库存量、批量、数量类字段统一用DECIMAL(18,3)金额类字段统一用DECIMAL(18,2)这样数量不会因为精度不够而出现小数点丢失金额也不会出现四舍五入对不上账的问题。合格率用DECIMAL(5,4)最大能表示9.9999足够覆盖正常生产场景。物料主数据建完接下来才按业务顺序建BOM表、工作中心信息表、工艺路线表再建销售订单、采购订单这些单据表最后建MPS、MRP的报表主表和从表。整套表建完后还有一步初始化不能省把批量规则、需求时界、计划时界这些计划参数在物料主数据里预置好不要等报表生成了再补。之前做门窗厂的MES项目我直接照着一份类似的字段清单设计了计划表结果物料主数据编码规则没定报表跑了三周全是重复物料和乱码后来花了大力气清洗。从那以后我每次做ERP落地都强制要求先定物料编码规则和BOM展开规则再碰计划表。按这个顺序走一遍这份文档里的表结构基本就能稳稳落地希望帮到你。本文还有配套的精品资源点击获取
返回列表