QDAirPortBackend0122/doc/work/数据模型统一重构方案_20250115.md
2026-01-22 13:19:47 +08:00

5.3 KiB
Raw Blame History

数据模型统一重构方案

项目概述

创建时间: 2025-01-15
执行模式: 方案B - 完全统一数据模型
目标: 统一vehicle_id为数字IDlicense_plate为车牌号消除所有字段名不一致

用户需求

  • 采用方案B统一名称和含义
  • license_plate_number和license_plate都采用license_plate
  • 统一所有的名称和含义,去掉各种中间转换
  • 其他表有类似问题也一样处理

详细分析

🎯 统一规则

  1. vehicle_id: 所有表中统一为 BIGINT 数字ID主键自增
  2. license_plate: 所有表中统一为 VARCHAR(50) 车牌号字段名
  3. 关联关系: 通过 vehicle_id 进行主键关联,license_plate 作为业务标识

📊 影响范围分析

数据库表结构变更

QAUP-Management:

-- 当前: sys_vehicle_info
vehicle_id BIGINT (主键)
license_plate_number VARCHAR(50)  license_plate VARCHAR(50)

-- 变更:重命名字段
ALTER TABLE sys_vehicle_info RENAME COLUMN license_plate_number TO license_plate;

CollisionAvoidanceSystem:

-- 当前: vehicle_locations
vehicle_id VARCHAR(50) (车牌号)  BIGINT (数字ID)
新增: license_plate VARCHAR(50) (车牌号)

-- 变更:类型转换 + 新增字段
ALTER TABLE vehicle_locations ADD COLUMN license_plate VARCHAR(50);
ALTER TABLE vehicle_locations ADD COLUMN vehicle_id_new BIGINT;
-- 数据迁移后删除旧字段,重命名新字段

Java代码变更统计

QAUP-Management (预计15个文件):

  • SysVehicleInfo.java - 实体类字段重命名
  • SysVehicleInfoMapper.xml - MyBatis映射更新
  • SysVehicleInfoMapper.java - 接口方法参数
  • SysVehicleInfoService.java - 服务层逻辑
  • SysVehicleInfoController.java - 控制器
  • 前端Vue组件 - 表单字段和API调用

CollisionAvoidanceSystem (预计25个文件):

  • 所有包含 vehicleId 的实体类(字段类型变更)
  • 所有相关的 Repository、Service、Controller
  • DTO和转换器类
  • WebSocket消息处理类

🔄 数据迁移策略

第一阶段:数据结构准备

  1. 创建临时字段
  2. 建立车牌号到数字ID的映射表
  3. 数据完整性检查

第二阶段:数据迁移

  1. 填充新字段数据
  2. 验证数据一致性
  3. 更新外键约束

第三阶段:结构清理

  1. 删除旧字段
  2. 重命名新字段
  3. 重建索引和约束

实施检查清单

1. 数据库结构变更脚本

  • 创建统一的数据库变更脚本
  • 包含回滚脚本
  • 数据完整性验证

2. QAUP-Management代码更新

  • 更新SysVehicleInfo实体类
  • 更新MyBatis Mapper文件
  • 更新Service层代码
  • 更新Controller层代码
  • 更新前端Vue组件

3. CollisionAvoidanceSystem代码更新

  • 更新所有实体类的vehicle_id字段类型
  • 更新Repository接口
  • 更新Service层逻辑
  • 更新Controller层代码
  • 更新DTO和转换器
  • 更新WebSocket消息处理

4. 数据迁移执行

  • 备份现有数据
  • 执行结构变更脚本
  • 执行数据迁移脚本
  • 验证数据完整性

5. 测试验证

  • 单元测试更新
  • 集成测试更新
  • 功能测试验证
  • 性能测试验证

6. 文档更新

  • API文档更新
  • 数据库文档更新
  • 使用指南更新
  • 版本变更记录

风险评估

🔴 高风险点

  1. 数据完整性风险: 迁移过程中可能的数据丢失
  2. 接口兼容性风险: 外部系统调用可能受影响
  3. 系统停机风险: 结构变更需要服务停机

🟡 中风险点

  1. 代码兼容性: 大量代码变更可能引入新bug
  2. 性能影响: 索引重建可能影响查询性能
  3. 回滚复杂度: 变更范围大,回滚操作复杂

🟢 低风险点

  1. 业务逻辑: 核心业务逻辑不变
  2. 用户体验: 前端界面基本不变

实施计划

准备阶段1-2天

  1. 创建完整的数据库变更脚本
  2. 创建车牌号到数字ID的映射关系
  3. 准备回滚脚本和验证脚本

开发阶段3-5天

  1. 并行更新两个项目的代码
  2. 更新所有相关测试用例
  3. 本地环境验证

测试阶段2-3天

  1. 完整的数据迁移测试
  2. 功能回归测试
  3. 性能影响评估

部署阶段1天

  1. 生产环境数据备份
  2. 服务停机窗口执行变更
  3. 验证和监控

当前执行步骤

正在执行: "1. 分析所有相关表和字段,制定统一的数据模型重构方案"

后续步骤预览

  1. 创建数据库结构变更脚本
  2. 更新QAUP-Management Java实体类
  3. 更新CollisionAvoidanceSystem Java实体类
  4. 同步Mapper和Repository更新
  5. 更新Service层代码
  6. 更新API接口
  7. 更新前端组件
  8. 创建数据迁移脚本
  9. 更新测试用例
  10. 完整验证和测试

完成标准

数据模型统一

  • 所有表的vehicle_id都是BIGINT类型
  • 所有表的车牌号字段都叫license_plate
  • 消除所有字段名不一致

代码质量

  • 所有编译错误已解决
  • 所有单元测试通过
  • 代码风格一致

功能验证

  • 车辆管理功能正常
  • 实时位置监控正常
  • 数据关联查询正常
  • API接口响应正确

性能验证

  • 查询性能不降低
  • 数据库索引优化
  • 内存使用正常