Appearance
数据库设计
**本文引用的文件** - [device.sql](file://docs/ddl/device.sql) - [store.sql](file://docs/ddl/store.sql) - [workflow.sql](file://docs/ddl/workflow.sql) - [PartMainDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/PartMainDo.java) - [PersonalPartStoreDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/PersonalPartStoreDo.java) - [PersonalApplyBorrowOrdersDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/PersonalApplyBorrowOrdersDo.java) - [PersonalTransferOrdersDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/PersonalTransferOrdersDo.java) - [PartScrapOrdersDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/PartScrapOrdersDo.java) - [ApproveProcessVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/entity/ApproveProcessVo.java)目录
简介
本文件面向 DeviceMate 项目的数据库设计,系统性梳理 PostgreSQL 数据库在设备管理、仓储管理、工作流管理三大业务域的表结构、序列(Sequence)使用策略、索引设计、约束条件与 DDL 脚本要点。同时结合 Java 实体类映射关系,给出数据类型选择原则与最佳实践,帮助数据库管理员与开发人员高效理解并维护该数据库。
项目结构
- 数据库 DDL 文件位于 docs/ddl 目录,分别覆盖设备、仓储、工作流三大部分。
- Java 实体类位于 lemes-cloud 对应模块的 common 层,用于 MyBatis-Plus 映射,体现字段与表的对应关系。
图表来源
- device.sql
- store.sql
- workflow.sql
- PartMainDo.java
- PersonalPartStoreDo.java
- PersonalApplyBorrowOrdersDo.java
- PersonalTransferOrdersDo.java
- PartScrapOrdersDo.java
- ApproveProcessVo.java
章节来源
核心组件
设备域(device.sql)
- 关键表:line(线体)、process(制程)、paste_glue_base(锡膏胶水基础属性)、paste_glue_in_order(入库单)、paste_glue_in_order_detail(入库单明细)、paste_glue_station_records(过站记录)、paste_glue_store(库存明细)、part_main(物料主数据)、part_scrap_orders(报废单据)、part_scrap_order_detail(报废单据详情)等。
- 序列:大量以 store.*_id_seq 或 *_id_seq 命名,部分带 maxvalue 限制;序列归属 a_appconnect。
- 索引:常见主键自增索引、唯一索引(如 paste_glue_base 的 (factory_no, paste_glue_no))、业务常用查询字段索引(如 personal_part_store_user_no_idx)。
- 约束:主键约束、唯一约束、默认值、非空约束、逻辑删除标志 is_delete。
仓储域(store.sql)
- 关键表:personal_* 系列表(领用借用、归还、报损、调拨、个人库存清单),与设备域共享序列命名风格。
- 索引:针对单据号、用户号、状态等高频过滤字段建立索引。
- 约束:unique 约束保证单据号与业务键唯一性。
工作流域(workflow.sql)
- 关键表:flow_audit_log(审批日志)、flow_log(流程日志)、flow_node_config(节点配置)、flow_user/role(用户与角色)、流程引擎相关表(flw_*)。
- 索引:对流程图 key、版本、tenant_id 等进行唯一索引;对批量任务表建立外键索引。
- 约束:主键、唯一、默认时间戳、逻辑删除。
章节来源
架构总览
整体采用“多模块、多域”的数据库设计思路:
- 设备域:围绕线体、制程、物料、胶水生命周期管理,强调序列化主键与业务编码唯一性。
- 仓储域:围绕个人物料全生命周期(借用、归还、报损、调拨、库存)管理,强调单据号与用户维度的索引优化。
- 工作流域:独立于业务域之上,提供统一的审批与流程引擎能力,通过业务单据号与流程实例关联。
图表来源
- store.sql
- PartMainDo.java
- PersonalPartStoreDo.java
- PersonalApplyBorrowOrdersDo.java
- PersonalTransferOrdersDo.java
- PartScrapOrdersDo.java
详细组件分析
设备域(设备、制程、胶水、物料、报废)
- 表关系与职责
- line/process:描述产线与制程的基础信息。
- paste_glue_base/paste_glue_in_order/paste_glue_in_order_detail/paste_glue_station_records/paste_glue_store:围绕锡膏胶水从入库到库存再到过站的全生命周期。
- part_main/part_scrap_orders/part_scrap_order_detail:物料主数据与报废流程。
- 主键与序列
- 大量使用 nextval('store.*_id_seq'::regclass) 作为自增主键来源;部分序列带 maxvalue 限制,如 paste_glue_in_order_id_seq。
- 索引策略
- paste_glue_base 建有 (factory_no, paste_glue_no) 唯一索引,确保工厂+胶水唯一。
- personal_part_store 建有 user_no 索引,支撑按用户检索。
- 约束与默认值
- is_delete 默认 0(逻辑删除);valid_flag 默认 1;numeric 字段保留精度与规模。
- DDL 要点
- unique 约束用于单据号与业务键;主键约束保证每条记录唯一性;注释明确字段含义,便于审计与维护。
图表来源
章节来源
仓储域(个人物料生命周期)
- 表关系与职责
- personal_part_store:个人物料清单,记录用户持有的具体物料及状态。
- personal_apply_borrow_orders/personal_apply_borrow_order_detail:个人领用借用单据与明细。
- personal_part_return_orders/personal_part_return_order_detail:个人归还单据与明细。
- personal_report_damage_orders/personal_report_damage_order_detail:个人报损单据与明细。
- personal_transfer_orders/personal_transfer_order_detail:个人调拨单据与明细。
- 主键与序列
- 统一使用 store.*_id_seq 系列;部分表对明细表引入 pps_id(个人物料清单 Id)作为外键,保障一致性。
- 索引策略
- personal_part_store_user_no_idx:按用户检索。
- personal_report_damage_orders_damage_order_no_idx、personal_transfer_orders_transfer_order_no_idx 等:按单据号检索。
- 约束与默认值
- is_delete 默认 0;many 数值字段使用 bigint/numeric 保证精度;状态字段使用 smallint 枚举化。
- DDL 要点
- unique 约束保证单据号唯一;明细表通过外键与主表关联;注释清晰标注业务含义。
图表来源
章节来源
工作流域(审批与流程)
- 表关系与职责
- flow_audit_log:审批日志,记录流程实例、节点、审批人、状态与时间。
- flow_log:流程引擎日志,记录节点流转与表单信息。
- flow_node_config:流程节点配置,含节点类型与参数。
- flow_user/flow_user_role:用户与角色,支持工厂/部门层级。
- 流程引擎相关表(flw_*):事件定义、通道定义、批次任务等。
- 主键与序列
- flow_log 使用自增序列 flow_mcs_log_id_seq;其他表多为主键自增或 bigserial。
- 索引策略
- flw_event_definition/flw_channel_definition:基于 key/version/tenant_id 的唯一索引。
- flw_ru_batch_part:基于 batch_id 的索引。
- 约束与默认值
- is_delete 默认 0;create_time/update_time 默认 CURRENT_TIMESTAMP;many 表字段使用 smallint/int/char 等表达枚举与标志位。
- DDL 要点
- 注释覆盖业务含义;唯一索引保障流程图 key 的唯一性;外键约束保证批次任务与父任务的关系。
图表来源
章节来源
依赖分析
- Java 实体类与 DDL 的映射关系
- PartMainDo → part_main:字段与注释一一对应,体现物料主数据的结构与约束。
- PersonalPartStoreDo → personal_part_store:用户、仓库、物料、数量、时间等字段映射一致。
- PersonalApplyBorrowOrdersDo → personal_apply_borrow_orders:单据号、状态、用户、工单等字段映射一致。
- PersonalTransferOrdersDo → personal_transfer_orders:调拨单号、出/入库用户、状态等字段映射一致。
- PartScrapOrdersDo → part_scrap_orders:报废单号、仓库、库区、库位、状态等字段映射一致。
- ApproveProcessVo → 审批流程 API:与 workflow 审批日志字段对应,支撑业务单据与流程实例的绑定。
图表来源
- PartMainDo.java
- PersonalPartStoreDo.java
- PersonalApplyBorrowOrdersDo.java
- PersonalTransferOrdersDo.java
- PartScrapOrdersDo.java
章节来源
- PartMainDo.java
- PersonalPartStoreDo.java
- PersonalApplyBorrowOrdersDo.java
- PersonalTransferOrdersDo.java
- PartScrapOrdersDo.java
性能考量
- 索引策略
- 高频过滤字段(如单据号、用户号、状态)建立索引,减少全表扫描。
- 唯一索引保障业务键唯一性,避免重复与并发问题。
- 序列与分片
- 当前序列以工厂/业务域命名,具备一定分片效果;若未来需水平扩展,建议在序列命名中加入分片键(如工厂号哈希),并在应用层按分片键路由。
- 数据类型
- 数值型使用 numeric 保留精度;时间型使用 timestamp(6)/date;枚举型使用 smallint/integer;字符串使用 varchar(n),避免超长。
- 批处理与日志
- 工作流域的批次任务表(flw_ru_batch/_part)通过索引与外键约束支撑高并发场景。
故障排查指南
- 常见问题
- 单据号重复:检查 unique 约束与序列使用是否正确。
- 查询慢:确认是否缺少必要索引(如单据号、用户号、状态)。
- 审批日志缺失:核对流程实例 ID 与业务单据号的关联字段是否正确。
- 排查步骤
- 核对 DDL 中的注释与约束,定位字段含义与默认值。
- 检查索引是否存在且生效。
- 结合 Java 实体类字段映射,确认业务字段是否一致。
章节来源
结论
DeviceMate 的数据库设计遵循“业务域清晰、主键自增、唯一约束、注释完备”的原则。设备域强调胶水生命周期与物料主数据;仓储域聚焦个人物料全生命周期与单据号唯一性;工作流域提供统一的审批与流程能力。通过序列化主键与索引策略,满足高并发与可维护性的双重需求。建议后续在序列分片与热点字段索引方面进一步优化,以支撑更大规模的数据与业务增长。