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

中小企业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)+ 列权限控制实现细粒度数据访问
http://www.xdnf.cn/news/3486.html

相关文章:

  • Spring MVC @RequestHeader 注解怎么用?
  • VMware提供的三种网络连接模式
  • Android WebView加载h5打开麦克风与摄像头的权限问题
  • Haskell Drracket OCaml Prolog 逻辑式编程函数式编程代写代做
  • 从 Eclipse Papyrus / XText 转向.NET —— SCADE MBD技术的演化
  • aab转apk
  • DeepSeek玄学指令大全
  • 【电脑维修】MERCURY水星无线网卡导致 Windows 网络适配器无法连接的一种情况
  • T575729 正经数组
  • IDA pro接入千问大模型
  • Java关键字解析
  • 【dify—7】文本生成应用实战——学员周报生成
  • 「Mac畅玩AIGC与多模态12」开发篇08 - 使用自定义汇率查询插件开发智能体应用
  • 数字智慧方案6146丨智慧学院智能化项目规划设计方案(45页PPT)(文末有下载方式)
  • QT6 源(66)篇三:阅读与注释类 QAbstractSpinBox ,这是螺旋框的基类,附上源码
  • 销售预测业务优化设计方案汇报P99(99页PPT)(文末有下载方式)
  • C++使用accumulate函数对数组进行快速求和
  • C# System.Text.Json终极指南(十):从基础到高性能序列化实战
  • 论云原生架构及其应用
  • LTspice
  • Codeforces Round 1008 (Div. 2) C
  • ​基于51单片机的数字温度计—可显示负数
  • 23.linux中RGB的转HDMI实验_csdn
  • [c语言日寄]检查环形链表
  • 2025年4月文章一览
  • AD系列:Windows Server 2025 安装AD CS角色和颁发证书
  • 极大电视 0.0.5.2| 基于Web的电视直播应用,提供高清、流畅的央视频道和各大卫视直播,完全免费无广告
  • 文心智能体平台:接入文心最新旗舰版模型!
  • String StringBuilder StringBuffer
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·背包模型(一)