中小企业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_order
  FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');

-- 按设备类型哈希分区(设备表)
CREATE TABLE equipment_cnc PARTITION OF equipment
  FOR VALUES WITH (MODULUS 4, REMAINDER 0)
  WHERE type = 'CNC';

4.2 时序数据压缩

# TimescaleDB压缩策略
compression:
  segment_by: device_id
  order_by: time DESC
  chunk_time_interval: 1d
  compression_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_inspection
  USING (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)+ 列权限控制实现细粒度数据访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值