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

240 lines
7.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 战场探索系统数据库设计
## 设计概述
根据"战场探索系统"的实际需求,重新设计了数据库结构:
- **移除了伤员记录表** - 不符合战场探索的核心功能
- **合并设备表** - 无人机和地面机器人使用统一表结构,通过`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: 功能增强
- 实现探索任务管理
- 添加设备协同功能
- 完善日志记录系统
这个设计完全符合"战场探索系统"的定位,突出了设备管理和探索任务的核心功能,同时保持了与现有代码的兼容性。