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

207 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据模型统一重构方案
## 项目概述
**创建时间**: 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:**
```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接口响应正确
### 性能验证
- [ ] 查询性能不降低
- [ ] 数据库索引优化
- [ ] 内存使用正常