智慧水务管理系统 - 精河县供水工程综合管理平台

database-schema.md 6.7KB

数据库架构设计

数据库概览

本项目使用 PostgreSQL 作为主数据库,支持水质管控与报警管理系统的核心业务数据存储。

核心实体表结构

1. 水质监测站点 (water_quality_station)

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)

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)

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)

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:已解决状态

数据初始化脚本

-- 初始化水质监测站点
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 缓存