108 lines
4.7 KiB
SQL
108 lines
4.7 KiB
SQL
-- 迁移到无人车专用系统
|
||
-- 将复杂的通用规则违规系统简化为专门针对无人车的系统
|
||
-- 作者: AI Assistant
|
||
-- 创建日期: 2025-01-17
|
||
-- 版本: 1.0
|
||
|
||
-- ===========================================
|
||
-- 第一步:创建新的简化表
|
||
-- ===========================================
|
||
|
||
-- 如果新表不存在,创建它
|
||
CREATE TABLE IF NOT EXISTS unmanned_vehicle_violations (
|
||
-- 主键ID
|
||
id BIGSERIAL PRIMARY KEY,
|
||
|
||
-- 无人车车牌号
|
||
vehicle_license VARCHAR(20) NOT NULL,
|
||
|
||
-- 违规规则名称
|
||
rule_name VARCHAR(100) NOT NULL,
|
||
|
||
-- 违规类型(SPEED-超速, ACCESS-未授权进入, HEIGHT-超高, WEIGHT-超重)
|
||
violation_type VARCHAR(10) NOT NULL CHECK (violation_type IN ('SPEED', 'ACCESS', 'HEIGHT', 'WEIGHT', 'OTHER')),
|
||
|
||
-- 违规描述
|
||
description VARCHAR(150),
|
||
|
||
-- 违规位置(PostGIS几何点)
|
||
location GEOMETRY(Point, 4326),
|
||
|
||
-- 实际值(如实际速度:19.8)
|
||
actual_value DOUBLE PRECISION,
|
||
|
||
-- 限制值(如限速:5.0)
|
||
limit_value DOUBLE PRECISION,
|
||
|
||
-- 违规发生时间
|
||
violation_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
||
-- 记录创建时间
|
||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- ===========================================
|
||
-- 第二步:创建索引
|
||
-- ===========================================
|
||
|
||
-- 创建索引以提高查询性能
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_vehicle ON unmanned_vehicle_violations(vehicle_license);
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_rule ON unmanned_vehicle_violations(rule_name);
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_time ON unmanned_vehicle_violations(violation_time);
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_type ON unmanned_vehicle_violations(violation_type);
|
||
|
||
-- 创建复合索引用于常见查询组合
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_vehicle_time ON unmanned_vehicle_violations(vehicle_license, violation_time DESC);
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_type_time ON unmanned_vehicle_violations(violation_type, violation_time DESC);
|
||
|
||
-- 如果启用了PostGIS,创建空间索引
|
||
CREATE INDEX IF NOT EXISTS idx_uv_violations_location ON unmanned_vehicle_violations USING GIST(location);
|
||
|
||
-- ===========================================
|
||
-- 第三步:清理旧表(谨慎操作)
|
||
-- ===========================================
|
||
|
||
-- 注释掉,需要手动执行以确保安全
|
||
-- DROP TABLE IF EXISTS rule_violation_events CASCADE;
|
||
|
||
-- ===========================================
|
||
-- 第四步:添加表注释
|
||
-- ===========================================
|
||
|
||
COMMENT ON TABLE unmanned_vehicle_violations IS '无人车违规事件表 - 专门记录机场无人车的各种违规行为(简化版本)';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.id IS '主键ID,自增';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.vehicle_license IS '无人车车牌号';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.rule_name IS '违规的规则名称';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.violation_type IS '违规类型:SPEED超速/ACCESS未授权进入/HEIGHT超高/WEIGHT超重';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.description IS '违规描述,如"超速: 19.8km/h"';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.location IS '违规发生的地理位置(PostGIS Point)';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.actual_value IS '实际测量值,如实际速度19.8';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.limit_value IS '规则限制值,如限速5.0';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.violation_time IS '违规发生的时间';
|
||
COMMENT ON COLUMN unmanned_vehicle_violations.created_at IS '记录创建时间';
|
||
|
||
-- ===========================================
|
||
-- 第五步:验证迁移结果
|
||
-- ===========================================
|
||
|
||
-- ===========================================
|
||
-- 总结和建议
|
||
-- ===========================================
|
||
|
||
/*
|
||
迁移完成后的系统优势:
|
||
|
||
1. 🚗 专门针对无人车:表结构和字段名直观易懂
|
||
2. 📉 大幅简化:从20+个字段减少到10个核心字段
|
||
3. 🔧 易于维护:没有复杂的JSON字段和多对象类型支持
|
||
4. ⚡ 性能更好:简化的索引策略,专门优化的查询
|
||
5. 💡 业务聚焦:只关注无人车的违规检测,符合实际需求
|
||
|
||
建议的后续操作:
|
||
1. 在代码中完全移除对 RuleViolationEventRepository 的依赖
|
||
2. 只使用 SimpleRuleViolationEventRepository
|
||
3. 清理所有不必要的复杂事件处理逻辑
|
||
4. 在确认新系统工作正常后,删除旧的 rule_violation_events 表
|
||
|
||
注意:在删除旧表之前,请确保新系统已经完全测试并正常工作!
|
||
*/ |