版本:V1.0
日期:2025年5月2日
一、数据库架构概览
1.1 数据库选型
数据类型 | 数据库类型 | 技术选型 | 用途 |
---|
时序数据(传感器读数) | 时序数据库 | TimescaleDB | 存储设备实时监控数据 |
结构化业务数据 | 关系型数据库 | PostgreSQL | 工单、质量、设备等核心业务数据 |
非结构化数据 | 对象存储 | MinIO | 质检图片、SOP文档等 |
实时缓存 | 内存数据库 | Redis | 看板数据、会话状态 |
二、核心表结构设计
2.1 生产执行模块
工单表 (work_order)
字段名 | 类型 | 约束 | 描述 |
---|
order_id | VARCHAR(36) | PRIMARY KEY | 工单唯一标识 |
product_code | VARCHAR(20) | NOT NULL | 产品型号 |
plan_qty | INTEGER | CHECK>0 | 计划数量 |
priority | ENUM(‘H’,‘M’,‘L’) | DEFAULT ‘M’ | 优先级 |
status | ENUM(‘Created’,‘Scheduled’,‘Running’,‘Completed’,‘Closed’) | NOT NULL | 工单状态 |
start_time | TIMESTAMPTZ | | 实际开始时间 |
end_time | TIMESTAMPTZ | | 实际结束时间 |
工序表 (work_step)
字段名 | 类型 | 约束 | 描述 |
---|
step_id | SERIAL | PRIMARY KEY | 工序自增ID |
order_id | VARCHAR(36) | FOREIGN KEY REFERENCES work_order(order_id) | 关联工单 |
seq_num | INTEGER | CHECK>0 | 工序顺序号 |
equipment_id | VARCHAR(20) | | 绑定设备编号 |
target_cycle | FLOAT | | 标准节拍(秒/件) |
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_id | UUID | PRIMARY KEY | 采样数据ID |
parameter_name VARCHAR(50) | NOT NULL | 监控参数名(如"直径") | |
measurement | FLOAT | NOT NULL | 测量值 |
usl | FLOAT | | 规格上限 |
lsl | FLOAT | | 规格下限 |
collection_time TIMESTAMPTZ | NOT 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, ip_address INET,last_maintenance_date DATE,oee_target FLOAT CHECK (oee_target BETWEEN 0 AND 1)
);
维护记录表 (maintenance_log)
字段名 | 类型 | 约束 | 描述 |
---|
log_id | SERIAL | PRIMARY KEY | 维护记录ID |
equipment_id | VARCHAR(20) | REFERENCES equipment(equipment_id) | 设备ID |
maintenance_type ENUM(‘Preventive’,‘Corrective’) | NOT NULL | 维护类型 | |
| downtime_duration INTERVAL | NOT 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
);
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 时序数据压缩
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;
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 物化视图
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_order | status | Created/Scheduled/Running/Completed/Closed |
equipment | type | CNC/AGV/Sensor |
maintenance_log | maintenance_type | Preventive/Corrective |
设计验证要点:
- 时序数据写入:测试500设备持续写入时,TimescaleDB的吞吐量是否≥10万数据点/秒
- 复杂查询响应:验证跨工单-工序-质检的关联查询在1亿数据量下的执行计划
- 分区切换:模拟年度数据归档时,新分区自动创建是否正常
该数据库设计通过以下创新点支撑系统需求:
- 混合存储策略:结合关系型与时序数据库优势,平衡事务处理与时间序列分析需求
- 动态压缩:TimescaleDB自动压缩策略降低存储成本70%+
- 多级安全:行级安全(RLS)+ 列权限控制实现细粒度数据访问