# 战场探索系统数据库设计

## 设计概述

根据"战场探索系统"的实际需求，重新设计了数据库结构：
- **移除了伤员记录表** - 不符合战场探索的核心功能
- **合并设备表** - 无人机和地面机器人使用统一表结构，通过`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: 功能增强
- 实现探索任务管理
- 添加设备协同功能
- 完善日志记录系统

这个设计完全符合"战场探索系统"的定位，突出了设备管理和探索任务的核心功能，同时保持了与现有代码的兼容性。