当前位置: 首页 > news >正文

中小企业MES系统数据库设计


版本:V1.0
日期:2025年5月2日


一、数据库架构概览

1.1 数据库选型

数据类型数据库类型技术选型用途
时序数据(传感器读数)时序数据库TimescaleDB存储设备实时监控数据
结构化业务数据关系型数据库PostgreSQL工单、质量、设备等核心业务数据
非结构化数据对象存储MinIO质检图片、SOP文档等
实时缓存内存数据库Redis看板数据、会话状态

二、核心表结构设计

2.1 生产执行模块

工单表 (work_order)
字段名类型约束描述
order_idVARCHAR(36)PRIMARY KEY工单唯一标识
product_codeVARCHAR(20)NOT NULL产品型号
plan_qtyINTEGERCHECK>0计划数量
priorityENUM(‘H’,‘M’,‘L’)DEFAULT ‘M’优先级
statusENUM(‘Created’,‘Scheduled’,‘Running’,‘Completed’,‘Closed’)NOT NULL工单状态
start_timeTIMESTAMPTZ实际开始时间
end_timeTIMESTAMPTZ实际结束时间
工序表 (work_step)
字段名类型约束描述
step_idSERIALPRIMARY KEY工序自增ID
order_idVARCHAR(36)FOREIGN KEY REFERENCES work_order(order_id)关联工单
seq_numINTEGERCHECK>0工序顺序号
equipment_idVARCHAR(20)绑定设备编号
target_cycleFLOAT标准节拍(秒/件)

2.2 质量管理模块

质检记录表 (quality_inspection)
CREATE TABLE quality_inspection (inspection_id UUID PRIMARY KEY,order_id VARCHAR(36) REFERENCES work_order(order_id),step_id INTEGER REFERENCES work_step(step_id),defect_code VARCHAR(10) NOT NULL,  -- 缺陷代码severity_level SMALLINT CHECK (severity_level BETWEEN 1 AND 5),inspector VARCHAR(32),created_at TIMESTAMPTZ DEFAULT NOW(),CHECK ((defect_code = 'OK' AND severity_level IS NULL) OR (defect_code <> 'OK' AND severity_level IS NOT NULL))
);
SPC数据表 (spc_data)
字段名类型约束描述
sample_idUUIDPRIMARY KEY采样数据ID
parameter_name VARCHAR(50)NOT NULL监控参数名(如"直径")
measurementFLOATNOT NULL测量值
uslFLOAT规格上限
lslFLOAT规格下限
collection_time TIMESTAMPTZNOT NULL采集时间

2.3 设备管理模块

设备表 (equipment)
CREATE TABLE equipment (equipment_id VARCHAR(20) PRIMARY KEY,name VARCHAR(50) NOT NULL,type VARCHAR(20) CHECK (type IN ('CNC','AGV','Sensor')),protocol_type VARCHAR(20) NOT NULL,  -- 协议类型(OPCUA/Modbus等)ip_address INET,last_maintenance_date DATE,oee_target FLOAT CHECK (oee_target BETWEEN 0 AND 1)
);
维护记录表 (maintenance_log)
字段名类型约束描述
log_idSERIALPRIMARY KEY维护记录ID
equipment_idVARCHAR(20)REFERENCES equipment(equipment_id)设备ID
maintenance_type ENUM(‘Preventive’,‘Corrective’)NOT NULL维护类型
downtime_duration INTERVALNOT NULL停机时长

2.4 时序数据表(TimescaleDB超表)

传感器数据表 (sensor_data)
CREATE TABLE sensor_data (time TIMESTAMPTZ NOT NULL,device_id VARCHAR(20) REFERENCES equipment(equipment_id),sensor_type VARCHAR(20),value DOUBLE PRECISION,status_code SMALLINT
);-- 转换为TimescaleDB超表
SELECT create_hypertable('sensor_data','time',chunk_time_interval => INTERVAL '1 day',partitioning_column => 'device_id',number_partitions => 16
);-- 创建压缩策略
ALTER TABLE sensor_data SET (timescaledb.compress,timescaledb.compress_orderby = 'time DESC',timescaledb.compress_segmentby = 'device_id'
);

三、索引设计

3.1 关系型数据库索引

表名索引字段类型用途
work_order(status, start_time)复合索引快速查询进行中工单
quality_inspection(order_id, defect_code)复合索引缺陷统计分析
equipment(type, protocol_type)GIN索引设备类型快速检索

3.2 时序数据库索引

-- 时间范围查询优化
CREATE INDEX idx_sensor_time ON sensor_data (time DESC);-- 设备维度查询优化
CREATE INDEX idx_sensor_device ON sensor_data (device_id, time DESC);

四、数据分区策略

4.1 关系型数据分区

-- 按时间范围分区(工单表)
CREATE TABLE work_order_2023 PARTITION OF work_orderFOR VALUES FROM ('2025-01-01') TO ('2026-01-01');-- 按设备类型哈希分区(设备表)
CREATE TABLE equipment_cnc PARTITION OF equipmentFOR VALUES WITH (MODULUS 4, REMAINDER 0)WHERE type = 'CNC';

4.2 时序数据压缩

# TimescaleDB压缩策略
compression:segment_by: device_idorder_by: time DESCchunk_time_interval: 1dcompression_algorithm: zstd

五、安全设计

5.1 权限模型

-- 角色定义
CREATE ROLE production_manager;
GRANT SELECT, UPDATE ON work_order TO production_manager;-- 行级安全(RLS)
ALTER TABLE quality_inspection ENABLE ROW LEVEL SECURITY;
CREATE POLICY qc_policy ON quality_inspectionUSING (inspector = CURRENT_USER);

5.2 审计日志表

CREATE TABLE audit_log (log_id BIGSERIAL PRIMARY KEY,table_name VARCHAR(50) NOT NULL,operation_type VARCHAR(10) CHECK (operation_type IN ('INSERT','UPDATE','DELETE')),old_record JSONB,new_record JSONB,user_name VARCHAR(50) NOT NULL,operation_time TIMESTAMPTZ DEFAULT NOW()
);

六、性能优化设计

6.1 物化视图

-- OEE每日汇总
CREATE MATERIALIZED VIEW daily_oee
AS
SELECT equipment_id,time_bucket('1 day', time) AS bucket,AVG(availability) AS avg_availability,AVG(performance) AS avg_performance,AVG(quality) AS avg_quality
FROM oee_calculations
GROUP BY equipment_id, bucket
WITH DATA;-- 每日定时刷新
SELECT add_continuous_aggregate_policy('daily_oee',start_offset => INTERVAL '3 days',end_offset => INTERVAL '1 hour',schedule_interval => INTERVAL '1 day');

6.2 查询缓存

-- 高频查询结果缓存
CREATE TABLE query_cache (cache_key VARCHAR(128) PRIMARY KEY,result JSONB NOT NULL,expires_at TIMESTAMPTZ NOT NULL
);-- 索引加速缓存查询
CREATE INDEX idx_cache_expiry ON query_cache (expires_at);

七、数据字典

7.1 关键枚举值

表名字段名枚举值
work_orderstatusCreated/Scheduled/Running/Completed/Closed
equipmenttypeCNC/AGV/Sensor
maintenance_logmaintenance_typePreventive/Corrective

设计验证要点

  1. 时序数据写入:测试500设备持续写入时,TimescaleDB的吞吐量是否≥10万数据点/秒
  2. 复杂查询响应:验证跨工单-工序-质检的关联查询在1亿数据量下的执行计划
  3. 分区切换:模拟年度数据归档时,新分区自动创建是否正常

该数据库设计通过以下创新点支撑系统需求:

  • 混合存储策略:结合关系型与时序数据库优势,平衡事务处理与时间序列分析需求
  • 动态压缩:TimescaleDB自动压缩策略降低存储成本70%+
  • 多级安全:行级安全(RLS)+ 列权限控制实现细粒度数据访问

相关文章:

  • RabbitMQ的交换机
  • 【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(上篇)
  • 超长8分钟Suno V4.5 – 支持一首歌多风格转换啦~~~
  • Nginx部署Vue+ElementPlus应用案例(基于腾讯云)
  • PDF转换工具xpdf-tools-4.05
  • 敏感词 v0.25.0 新特性之 wordCheck 策略支持用户自定义
  • 【安装指南】Chat2DB-集成了AI功能的数据库管理工具
  • 论文阅读笔记——TesserAct: Learning 4D Embodied World Models
  • 【安装指南】Centos7 在 Docker 上安装 RabbitMQ4.0.x
  • 【无需docker】mac本地部署dify
  • AI Rack架构高速互连的挑战:损耗设计与信号完整性的设计框架
  • 在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行
  • 计算机网络 - stp生成树实验
  • 【现代深度学习技术】现代循环神经网络03:深度循环神经网络
  • MCP 探索:微软 Microsoft MarkItDown MCP ,可把 Word、Excel 等转换成 MarkDown 格式
  • sys目录介绍
  • 基于YOLOV5的目标检测识别
  • 多模态人工智能研究:视觉语言模型的过去、现在与未来
  • 【Git】万字详解 Git 的原理与使用(上)
  • 第 13 届蓝桥杯 C++ 青少组省赛中 / 高级组 2022 年真题
  • 竞彩湃|德甲保级白热化,都灵主帅直面旧主
  • 党政机关停车场免费、食堂开放,多地“五一”游客服务暖心周到
  • 宿州市委副书记任东已任市政府党组书记
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 十四届全国人大常委会第十五次会议在京闭幕
  • 海口市政协党组成员、秘书长、机关党组书记汪娟被查