# 战场探索系统数据库设计 ## 设计概述 根据"战场探索系统"的实际需求,重新设计了数据库结构: - **移除了伤员记录表** - 不符合战场探索的核心功能 - **合并设备表** - 无人机和地面机器人使用统一表结构,通过`device_type`字段区分 - **增加探索相关功能** - 添加了探索任务等战场探索核心功能 ## 数据库表结构 ### 1. devices (统一设备表) ⭐ 核心表 **用途**: 存储所有无人设备(无人机 + 地面机器人) ```sql CREATE TABLE devices ( id VARCHAR(50) PRIMARY KEY, -- 设备唯一ID name VARCHAR(100) NOT NULL, -- 设备名称 device_type VARCHAR(20) NOT NULL, -- 设备类型: 'uav'=无人机, 'dog'=地面机器人 state INT DEFAULT 0, -- 设备状态: 0=离线, 1=在线, 2=工作中, 3=错误 ip VARCHAR(15), -- 设备IP地址 port INT, -- 通信端口 longitude DOUBLE, -- 经度坐标 latitude DOUBLE, -- 纬度坐标 signal_strength INT DEFAULT 0, -- 信号强度 (0-100) last_heartbeat TIMESTAMP NULL, -- 最后心跳时间 battery_level INT DEFAULT 100, -- 电池电量 (0-100) firmware_version VARCHAR(50), -- 固件版本 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` **索引优化**: - `device_type` - 按设备类型快速筛选 - `state` - 按状态查询在线设备 - `(longitude, latitude)` - 地理位置查询 - `(device_type, state)` - 复合索引,查询特定类型的特定状态设备 ### 2. exploration_tasks (探索任务表) 🎯 业务核心 **用途**: 管理战场探索任务 ```sql CREATE TABLE exploration_tasks ( task_id VARCHAR(50) PRIMARY KEY, task_name VARCHAR(200) NOT NULL, task_type VARCHAR(50), -- 任务类型: patrol, reconnaissance, search assigned_devices JSON, -- 分配的设备ID列表 task_status VARCHAR(20) DEFAULT 'created', -- 任务状态 start_time TIMESTAMP NULL, end_time TIMESTAMP NULL, target_area JSON, -- 目标区域坐标 task_priority INT DEFAULT 1, -- 优先级: 1=低, 2=中, 3=高, 4=紧急 created_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` ### 3. system_config (系统配置表) ⚙️ **用途**: 存储系统配置参数 ```sql CREATE TABLE system_config ( config_key VARCHAR(100) PRIMARY KEY, config_value TEXT, config_type VARCHAR(20) DEFAULT 'string', description VARCHAR(500), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` ### 4. device_operation_logs (设备操作日志表) 📝 **用途**: 记录所有设备操作日志 ```sql CREATE TABLE device_operation_logs ( log_id BIGINT AUTO_INCREMENT PRIMARY KEY, device_id VARCHAR(50), device_type VARCHAR(20), operation VARCHAR(50), -- 操作: connect, disconnect, control, move, takeoff, land operation_result VARCHAR(20) DEFAULT 'success', operator VARCHAR(50), operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, details JSON, FOREIGN KEY (device_id) REFERENCES devices(id) ); ``` ### 5. user_sessions (用户会话表) 👤 **用途**: 管理用户登录会话 ```sql CREATE TABLE user_sessions ( session_id VARCHAR(100) PRIMARY KEY, user_name VARCHAR(50), login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ip_address VARCHAR(45), user_agent TEXT, status INT DEFAULT 1 ); ``` ## 兼容性设计 ### 视图映射 (保持现有代码工作) 为了确保现有的`UAVDatabase`和`DogDatabase`类继续工作,创建了兼容性视图: ```sql -- UAV设备视图 (兼容UAVDatabase) CREATE VIEW uavdatabase AS SELECT id, state, ip, port, longitude as lon, latitude as lat FROM devices WHERE device_type = 'uav'; -- Dog设备视图 (兼容DogDatabase) CREATE VIEW dogdatabase AS SELECT id, state, ip, port, longitude as lon, latitude as lat FROM devices WHERE device_type = 'dog'; ``` ## 设备类型管理 ### device_type 枚举值 - `'uav'` - 无人机设备 - `'dog'` - 地面机器人设备 ### state 状态值 - `0` - 离线 - `1` - 在线 - `2` - 工作中 - `3` - 错误 ### 示例数据 ```sql INSERT INTO devices VALUES ('UAV001', '侦察无人机-01', 'uav', 1, '192.168.1.101', 8001, 116.4074, 39.9042, 85, 95), ('DOG001', '地面机器人-01', 'dog', 1, '192.168.1.201', 8101, 116.4064, 39.9032, 92, 88); ``` ## 数据库查询示例 ### 1. 获取所有在线设备 ```sql SELECT id, name, device_type, signal_strength, battery_level FROM devices WHERE state = 1 ORDER BY device_type, name; ``` ### 2. 按设备类型分组统计 ```sql SELECT device_type, COUNT(*) as total_count, SUM(CASE WHEN state = 1 THEN 1 ELSE 0 END) as online_count, AVG(battery_level) as avg_battery FROM devices GROUP BY device_type; ``` ### 3. 查找信号弱的设备 ```sql SELECT id, name, device_type, signal_strength, last_heartbeat FROM devices WHERE state = 1 AND signal_strength < 50 ORDER BY signal_strength ASC; ``` ### 4. 获取设备列表(用于界面显示) ```sql SELECT id, name, CASE device_type WHEN 'uav' THEN '无人机' WHEN 'dog' THEN '地面机器人' END as type_name, CASE state WHEN 0 THEN '离线' WHEN 1 THEN '在线' WHEN 2 THEN '工作中' WHEN 3 THEN '错误' END as status_name, signal_strength, battery_level, ip, port FROM devices ORDER BY device_type, name; ``` ## 优势分析 ### 1. 统一管理 - ✅ 无人机和机器狗使用相同的数据结构 - ✅ 简化了数据库连接和管理代码 - ✅ 界面可以统一显示设备列表 ### 2. 扩展性强 - ✅ 添加新设备类型只需增加`device_type`值 - ✅ 字段统一,便于添加通用功能(如电池监控) - ✅ 便于实现设备间的协同任务 ### 3. 性能优化 - ✅ 减少了表的数量,降低了JOIN操作 - ✅ 合理的索引设计提升查询性能 - ✅ JSON字段支持灵活的扩展信息存储 ### 4. 兼容性保证 - ✅ 通过视图确保现有代码继续工作 - ✅ 渐进式迁移,降低风险 - ✅ 新老代码可以并存 ## 迁移策略 ### Phase 1: 表结构迁移 ✅ 已完成 - 创建新的统一`devices`表 - 创建兼容性视图 - 插入示例数据 ### Phase 2: 代码适配 - 更新数据库访问类,支持统一设备管理 - 修改界面代码,实现统一设备列表 - 添加设备类型筛选功能 ### Phase 3: 功能增强 - 实现探索任务管理 - 添加设备协同功能 - 完善日志记录系统 这个设计完全符合"战场探索系统"的定位,突出了设备管理和探索任务的核心功能,同时保持了与现有代码的兼容性。