中小企业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.mzph.cn/pingmian/79184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE篇之树形特殊篇

根节点是level:1, level3及其子节点有关联&#xff0c;但是和level2和他下面的子节点没有关联 思路&#xff1a;采用守护风琴效果&#xff0c;遍历出level1和level2级节点&#xff0c;后面level3的节点&#xff0c;采用树形结构进行关联 <template><div :class"…

洛圣电玩系列部署实录:一次自己从头跑通的搭建过程

写这篇文章不是为了“教大家怎么一步步安装”&#xff0c;而是想把我自己完整跑通洛圣电玩整个平台的经历复盘下来。因为哪怕你找到了所谓的全套源码资源&#xff0c;如果没人告诉你这些资源之间是怎么连起来的&#xff0c;你依旧是一脸懵逼。 我拿到的是什么版本&#xff1f; …

腾讯云web服务器配置步骤是什么?web服务器有什么用途?

腾讯云web服务器配置步骤是什么?web服务器有什么用途&#xff1f; Web服务器配置步骤&#xff08;以常见环境为例&#xff09; 1. 安装Web服务器软件 Linux系统&#xff08;如Ubuntu&#xff09; Apache: sudo apt update sudo apt install apache2 Nginx: sudo apt install…

第37课 绘制原理图——放置离页连接符

什么是离页连接符&#xff1f; 前边我们介绍了网络标签&#xff08;Net Lable&#xff09;&#xff0c;可以让两根导线“隔空相连”&#xff0c;使原理图更加清爽简洁。 但是网络标签的使用也具有一定的局限性&#xff0c;对于两张不同Sheet上的导线&#xff0c;网络标签就不…

Win下的Kafka安装配置

一、准备工作&#xff08;可以不做&#xff0c;毕竟最新版kafka也不需要zk&#xff09; 1、Windows下安装Zookeeper &#xff08;1&#xff09;官网下载Zookeeper 官网下载地址 &#xff08;2&#xff09;解压Zookeeper安装包到指定目录C:\DevelopApp\zookeeper\apache-zoo…

前端Vue3 + 后端Spring Boot,前端取消请求后端处理逻辑分析

在 Vue3 Spring Boot 的技术栈下&#xff0c;前端取消请求后&#xff0c;后端是否继续执行业务逻辑的答案仍然是 取决于请求处理的阶段 和 Spring Boot 的实现方式。以下是结合具体技术的详细分析&#xff1a; 1. 请求未到达 Spring Boot 场景&#xff1a;前端通过 AbortContr…

【蓝桥杯省赛真题58】Scratch画台扇 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

目录 scratch画台扇 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch画台扇 第十五届青少年蓝桥杯scratch编程省赛真题解析 …

GPT-4o 图像生成与八个示例指南

什么是GPT-4o图像生成&#xff1f; 简单来说&#xff0c;GPT-4o图像生成是集成在ChatGPT内部的一项功能。用户可以直接在对话中&#xff0c;通过文本描述&#xff08;Prompt&#xff09;来创建、编辑和调整图像。这与之前的图像生成工具相比&#xff0c;体验更流畅、交互性更强…

TCP 连接的“三次握手”与“四次挥手”

目录 什么是“三次握手” “四次挥手”&#xff1f; 三个标记位 三次握手 四次挥手 为什么握手三次&#xff0c;挥手需要四次&#xff1f; 为什么要等2MSL&#xff1f; 什么是“三次握手” “四次挥手”&#xff1f; 三次握手&#xff08;Three-way Handshake&#xf…

力扣刷题 -- 206.反转链表

题目&#xff1a; 方法一&#xff1a;创建新链表&#xff0c;遍历旧链表&#xff0c;进行头插 代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struc…

Vue 中的过渡效果与响应式数据:transition、transitiongroup、reactive 和 ref 详解

在 Vue 开发过程中&#xff0c;为应用添加过渡效果和处理响应式数据是提升用户体验和实现动态交互的关键。 一、transition&#xff1a;元素的单元素过渡效果 transition是 Vue 提供的内置组件&#xff0c;专门用于为单个元素或组件添加过渡动画。它会在元素插入、更新或移除…

文章七《深度学习调优与超参数优化》

&#x1f680; 文章7&#xff1a;深度学习调优与超参数优化——你的AI模型需要一场"整容手术" 一、模型调优核心策略&#xff1a;像调整游戏装备一样优化模型 1. 学习率调整&#xff1a;掌控训练的"油门踏板" 比喻&#xff1a;把模型训练想象成赛车游戏&…

Python装饰器执行时机详解:模块加载时的魔法

装饰器执行的基本原理 Python装饰器在程序运行过程中遵循独特的执行逻辑&#xff0c;其核心特性体现在模块加载阶段的即时执行。通过示例7-2的registration.py 模块&#xff0c;我们可以清晰观察到装饰器与函数执行的时序差异。 registry []def register(func):print(runnin…

基于随机森林的糖尿病预测模型研究应用(python)

基于随机森林的糖尿病预测模型研究应用 1、导入糖尿病数据集 In [14]: import pandas as pd import seaborn as sns import numpy as np import matplotlib.pyplot as plt datapd.read_csv(./糖尿病数据集.csv,encoding"gbk") data.head()#查看前五行数据Out[14]:…

【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建

在企业级 Java Web 应用的部署场景中&#xff0c;Tomcat 作为主流的 Servlet 容器和 Web 服务器&#xff0c;其核心配置的优化以及集群搭建对于保障应用的高性能、高可用性至关重要。 一、Tomcat 核心配置优化​ 1.1 server.xml 配置文件解析​ Tomcat 的核心配置文件server…

Linux(文件管理)

文件命名规则 除了字符“/”之外&#xff0c;所以的字符都可以使用&#xff0c;但要注意&#xff0c;在目录名或文件名中&#xff0c;不建议使用某些特殊字符&#xff0c;如&#xff1a;<、>、?、*等 如果一个文件名中包含了特殊字符&#xff0c;例如空格&#xff0c;那…

Windows服务器部署全攻略:Flask+Vue+MySQL跨平台项目实战(pymysql版)

当你的后端(Flask+pymysql,Windows开发)与前端(Vue,Mac开发)需要统一部署到Windows服务器时,通过「IIS反向代理+原生组件适配」方案可实现稳定交互。以下是针对Windows环境的专属部署指南,解决路径适配、服务启动等核心问题。 一、Windows服务器环境准备(必做!) 1…

wpf 输入框 在输入时去除水印

wpf ScrollViewer 在输入数据时去除水印 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;ScrollViewer控件通常用于显示滚动内容。如果你想在ScrollViewer中使用数据输入&#xff08;例如文本输入&#xff09;&#xff0c;并且希望在输入时去除水…

动态思维——AI与思维模型【91】

一、定义 动态思维思维模型是一种强调在思考问题和分析情况时&#xff0c;充分考虑到事物的变化性、发展性和相互关联性&#xff0c;不局限于静态的、孤立的视角&#xff0c;而是以发展变化的眼光看待事物&#xff0c;能够根据不同时间、环境和条件的变化&#xff0c;灵活调整…

多模态大语言模型arxiv论文略读(五十五)

MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ➡️ 论文标题&#xff1a;MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ➡️ 论文作者&#xff1a;Kunpeng Song, Yizhe Zhu, Bingchen Liu, Qing Yan, Ahmed Elgammal, Xiao…