# 数据库架构设计 ## 数据库概览 本项目使用 PostgreSQL 作为主数据库,支持水质管控与报警管理系统的核心业务数据存储。 ## 核心实体表结构 ### 1. 水质监测站点 (water_quality_station) ```sql CREATE TABLE water_quality_station ( id BIGSERIAL PRIMARY KEY, station_name VARCHAR(100) NOT NULL, location VARCHAR(200) NOT NULL, station_type VARCHAR(50) NOT NULL CHECK (station_type LIKE 'WQ-%'), description TEXT, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- 索引 CREATE INDEX idx_station_name ON water_quality_station(station_name); CREATE INDEX idx_station_type ON water_quality_station(station_type); CREATE INDEX idx_location ON water_quality_station(location); ``` ### 2. 药剂投加记录 (chemical_dosing) ```sql CREATE TABLE chemical_dosing ( id BIGSERIAL PRIMARY KEY, station_id BIGINT NOT NULL REFERENCES water_quality_station(id), chemical_type VARCHAR(50) NOT NULL, dosage DECIMAL(10,3) NOT NULL, unit VARCHAR(20), dosing_time TIMESTAMP WITH TIME ZONE, operator VARCHAR(50), notes TEXT, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- 索引 CREATE INDEX idx_chemical_dosing_station_id ON chemical_dosing(station_id); CREATE INDEX idx_chemical_dosing_chemical_type ON chemical_dosing(chemical_type); CREATE INDEX idx_chemical_dosing_dosing_time ON chemical_dosing(dosing_time); ``` ### 3. 工艺监控参数 (process_parameter) ```sql CREATE TABLE process_parameter ( id BIGSERIAL PRIMARY KEY, station_id BIGINT NOT NULL REFERENCES water_quality_station(id), parameter_type VARCHAR(100) NOT NULL, value DECIMAL(12,4) NOT NULL, unit VARCHAR(20), upper_limit DECIMAL(12,4), lower_limit DECIMAL(12,4), alarm_threshold DECIMAL(12,4), measurement_time TIMESTAMP WITH TIME ZONE, status VARCHAR(20) DEFAULT 'NORMAL' CHECK (status IN ('NORMAL', 'WARNING', 'ALARM')), notes TEXT, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- 索引 CREATE INDEX idx_process_parameter_station_id ON process_parameter(station_id); CREATE INDEX idx_process_parameter_parameter_type ON process_parameter(parameter_type); CREATE INDEX idx_process_parameter_measurement_time ON process_parameter(measurement_time); CREATE INDEX idx_process_parameter_alarm_threshold ON process_parameter(alarm_threshold); ``` ### 4. 水质报警记录 (water_quality_alarm) ```sql CREATE TABLE water_quality_alarm ( id BIGSERIAL PRIMARY KEY, station_id BIGINT NOT NULL REFERENCES water_quality_station(id), alarm_type VARCHAR(100) NOT NULL, alarm_level VARCHAR(20) NOT NULL CHECK (alarm_level IN ('LOW', 'MEDIUM', 'HIGH', 'CRITICAL')), alarm_message TEXT NOT NULL, alarm_time TIMESTAMP WITH TIME ZONE, acknowledge_time TIMESTAMP WITH TIME ZONE, resolve_time TIMESTAMP WITH TIME ZONE, status VARCHAR(20) DEFAULT 'ACTIVE' CHECK (status IN ('ACTIVE', 'ACKNOWLEDGED', 'RESOLVED')), operator VARCHAR(50), acknowledge_notes TEXT, resolve_notes TEXT, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- 索引 CREATE INDEX idx_alarm_station_id ON water_quality_alarm(station_id); CREATE INDEX idx_alarm_alarm_level ON water_quality_alarm(alarm_level); CREATE INDEX idx_alarm_alarm_type ON water_quality_alarm(alarm_type); CREATE INDEX idx_alarm_alarm_time ON water_quality_alarm(alarm_time); CREATE INDEX idx_alarm_status ON water_quality_alarm(status); ``` ## 业务规则约束 ### 水质监测站点类型 - WQ-01:站点覆盖(一体化/八家户/查村/沙山子/大河沿子镇) - WQ-02:全工艺监控(混凝→沉淀→过滤→消毒) - WQ-03:核心参数实时监控 - WQ-04:人工检测管理 - WQ-05:自动监测接入 - WQ-06:水质数据台账 ### 工艺监控参数类型 - 进水浊度 - 絮凝剂投加量 - 沉淀池液位 - 滤池状态 - 消毒剂投加量 - 余氯含量 - 出厂浊度 ### 报警级别定义 - LOW:低级别报警 - MEDIUM:中级报警 - HIGH:高级报警 - CRITICAL:严重报警 ### 报警状态流转 1. ACTIVE:报警激活状态 2. ACKNOWLEDGED:已确认状态 3. RESOLVED:已解决状态 ## 数据初始化脚本 ```sql -- 初始化水质监测站点 INSERT INTO water_quality_station (station_name, location, station_type, description) VALUES ('一体化水厂', '精河县一体化水厂', 'WQ-01', '精河县主要供水水厂'), ('八家户水厂', '精河县八家户乡', 'WQ-01', '八家户区域供水水厂'), ('查村水厂', '精河县查干莫墩乡', 'WQ-01', '查村区域供水水厂'), ('沙山子水厂', '精河县沙山子镇', 'WQ-01', '沙山子区域供水水厂'), ('大河沿子镇水厂', '精河县大河沿子镇', 'WQ-01', '大河沿子区域供水水厂'); -- 初始化药剂投加记录 INSERT INTO chemical_dosing (station_id, chemical_type, dosage, unit, dosing_time, operator) VALUES (1, '絮凝剂', 10.5, 'mg/L', NOW(), '系统自动'), (1, '消毒剂', 2.0, 'mg/L', NOW(), '系统自动'), (2, '絮凝剂', 12.0, 'mg/L', NOW(), '系统自动'), (3, '絮凝剂', 8.5, 'mg/L', NOW(), '系统自动'); -- 初始化工艺监控参数 INSERT INTO process_parameter (station_id, parameter_type, value, unit, upper_limit, lower_limit, alarm_threshold, measurement_time) VALUES (1, '进水浊度', 5.2, 'NTU', 10.0, 0.0, 8.0, NOW()), (1, '沉淀池液位', 3.5, 'm', 5.0, 1.0, 4.5, NOW()), (1, '滤池压力', 0.4, 'MPa', 0.6, 0.1, 0.5, NOW()), (1, '余氯', 0.3, 'mg/L', 0.5, 0.0, 0.4, NOW()); -- 初始化报警记录 INSERT INTO water_quality_alarm (station_id, alarm_type, alarm_level, alarm_message, alarm_time, status) VALUES (1, '水质超标', 'HIGH', '进水浊度超过警戒值(8.0 NTU)', NOW() - INTERVAL '1 hour', 'ACTIVE'), (2, '设备故障', 'MEDIUM', '沉淀池液位传感器异常', NOW() - INTERVAL '30 minutes', 'ACKNOWLEDGED'), (3, '水质异常', 'CRITICAL', '出厂浊度严重超标', NOW() - INTERVAL '15 minutes', 'ACTIVE'); ``` ## 数据库版本控制 本项目使用 Flyway 进行数据库版本管理: - 基础架构版本:V1 - 数据初始化版本:V2 - 预留版本:V3 及以上 ## 性能优化建议 1. **分区策略**:对于报警记录表,建议按时间分区 2. **索引优化**:定期分析查询模式,优化索引策略 3. **归档策略**:历史数据定期归档到历史表 4. **缓存策略**:热点数据使用 Redis 缓存