You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Software_Architecture/src/Client/doc/database/database_design.md

7.2 KiB

战场探索系统数据库设计

设计概述

根据"战场探索系统"的实际需求,重新设计了数据库结构:

  • 移除了伤员记录表 - 不符合战场探索的核心功能
  • 合并设备表 - 无人机和地面机器人使用统一表结构,通过device_type字段区分
  • 增加探索相关功能 - 添加了探索任务等战场探索核心功能

数据库表结构

1. devices (统一设备表) 核心表

用途: 存储所有无人设备(无人机 + 地面机器人)

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 (探索任务表) 🎯 业务核心

用途: 管理战场探索任务

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 (系统配置表) ⚙️

用途: 存储系统配置参数

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 (设备操作日志表) 📝

用途: 记录所有设备操作日志

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 (用户会话表) 👤

用途: 管理用户登录会话

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
);

兼容性设计

视图映射 (保持现有代码工作)

为了确保现有的UAVDatabaseDogDatabase类继续工作,创建了兼容性视图:

-- 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 - 错误

示例数据

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. 获取所有在线设备

SELECT id, name, device_type, signal_strength, battery_level 
FROM devices 
WHERE state = 1 
ORDER BY device_type, name;

2. 按设备类型分组统计

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. 查找信号弱的设备

SELECT id, name, device_type, signal_strength, last_heartbeat
FROM devices 
WHERE state = 1 AND signal_strength < 50
ORDER BY signal_strength ASC;

4. 获取设备列表(用于界面显示)

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: 功能增强

  • 实现探索任务管理
  • 添加设备协同功能
  • 完善日志记录系统

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