# 数据模型统一重构方案 ## 项目概述 **创建时间**: 2025-01-15 **执行模式**: 方案B - 完全统一数据模型 **目标**: 统一vehicle_id为数字ID,license_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:** ```sql -- 当前: 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:** ```sql -- 当前: 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接口响应正确 ### 性能验证 - [ ] 查询性能不降低 - [ ] 数据库索引优化 - [ ] 内存使用正常