model_train_dm/系统数据库表结构说明.md
2026-07-27 17:51:49 +08:00

595 lines
30 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.

# 系统数据库表结构说明
## 1. 文档说明
本文档基于以下内容整理:
- 数据库结构定义:`backend/config/settings/table.sql`
- 系统功能说明:`系统功能调整改造说明.md`
- 项目现有模型与业务代码中的字段语义和状态枚举
本文档重点说明以下 6 张核心业务表:
- `ai_dataset`
- `ai_dataset_sample`
- `ai_temp_file`
- `ai_annotate_task`
- `ai_annotate_task_sample`
- `ai_smart_terminal`
说明规则如下:
- 字段名、类型、是否为空、主键等,以 `table.sql` 为准
- 中文说明优先采用 SQL 注释,其次结合现有 Django 模型 `verbose_name`
- 枚举型字段优先采用项目代码中的现有说明
- 若某字段在当前代码中尚无正式枚举实现,则明确标记为“当前代码暂无实现,以下为建议值”
---
## 2. 表结构总览
| 表名 | 中文名称 | 用途说明 |
|------|----------|----------|
| `ai_dataset` | 数据集表 | 记录用户定义的数据集主信息 |
| `ai_dataset_sample` | 数据集样本表 | 记录数据集中的样本文件及标注结果 |
| `ai_temp_file` | 临时文件表 | 记录上传到 MinIO `tempfile` 桶中的临时文件 |
| `ai_annotate_task` | 标注任务表 | 记录面向单一数据集的标注任务主信息 |
| `ai_annotate_task_sample` | 标注任务样本表 | 记录标注任务中被分配的样本及标注审核状态 |
| `ai_smart_terminal` | 智能终端数据表 | 记录AI边缘计算盒子的站点属性、配置与运维信息 |
---
## 3. `ai_dataset` 数据集表
### 3.1 表说明
- 表名:`ai_dataset`
- 中文名称:数据集表
- 主键:`id`
- 用途:记录数据集基本信息、数据集标签、原始文件路径、数据集存储路径、样本数量和状态等
- 现有代码对应模型:`AiDataset`
- 当前代码旧表映射:`ai_algorithm_dataset`
### 3.2 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| `dataset_code` | `varchar(40)` | 是 | 否 | 数据集编号 | 现有代码按算法下顺序生成,如 `001`、`002` |
| `dataset_name` | `varchar(200)` | 是 | 否 | 数据集名称 | 无枚举 |
| `description` | `varchar(2000)` | 否 | 否 | 描述 | 无枚举 |
| `dataset_type` | `varchar(2)` | 是 | 否 | 类型 | 代码枚举:`01` 表格,`02` 图片,`03` 视频,`04` 音频,`05` 文本 |
| `features` | `varchar(200)` | 否 | 否 | 特征 | 自定义分类特征,逗号分割 |
| `original_file_path` | `varchar(400)` | 否 | 否 | 原始文件目录 | 原始上传包或原始文件所在目录 |
| `original_file_name` | `varchar(8000)` | 否 | 否 | 原始文件名称 | 现有代码支持多个文件名逗号拼接 |
| `dataset_path` | `varchar(400)` | 否 | 否 | 数据集存储路径 | 现阶段建议作为 MinIO 逻辑前缀或数据集逻辑目录 |
| `dataset_count` | `int4` | 否 | 否 | 样本总数 | 记录该数据集下样本数量 |
| `dataset_labels` | `varchar(2000)` | 否 | 否 | 数据集标签 | 现有代码约定为 JSON 字符串,如 `[{"label","name","color"}]` |
| `status` | `varchar(2)` | 是 | 否 | 数据集状态 | 代码枚举:`00` 未生成图片,`01` 初始创建,`02` 标注完成,`09` 标记删除 |
| `creator` | `varchar(20)` | 是 | 否 | 创建人 | 一般保存用户名 |
| `create_time` | `timestamptz` | 是 | 否 | 创建时间 | 记录创建时间 |
| `custom1` | `varchar(200)` | 否 | 否 | 备用1 | 现有代码常用于 `images_mask` 路径等扩展字段 |
| `custom3` | `varchar(200)` | 否 | 否 | 备用3 | 现有视频数据集场景中用于视频目录等扩展值 |
| `custom2` | `varchar(2000)` | 否 | 否 | 备用2 | 现有代码常用于视频清单等扩展值 |
### 3.3 枚举字段说明
#### `dataset_type`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `01` | 表格 | 来自模型 `AiDataset.dataset_type` |
| `02` | 图片 | 来自模型 `AiDataset.dataset_type` |
| `03` | 视频 | 来自模型 `AiDataset.dataset_type` |
| `04` | 音频 | 来自模型 `AiDataset.dataset_type` |
| `05` | 文本 | 来自模型 `AiDataset.dataset_type` |
#### `status`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `00` | 未生成图片 | 来自模型 `AiDataset.status` |
| `01` | 初始创建 | 来自模型 `AiDataset.status` |
| `02` | 标注完成 | 来自模型 `AiDataset.status` |
| `09` | 标记删除 | 来自模型 `AiDataset.status` |
---
## 4. `ai_dataset_sample` 数据集样本表
### 4.1 表说明
- 表名:`ai_dataset_sample`
- 中文名称:数据集样本表
- 主键:`id`
- 用途:记录数据集中的单个样本文件、文件路径、标注结果和状态
- 现有代码对应模型:`AiDatasetSample`
- 现有代码旧字段:`annotation_content`
- 新表结构改为:`rectangle`、`polygon`
### 4.2 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| `dataset_id` | `varchar(40)` | 是 | 否 | 关联数据集ID | 对应 `ai_dataset.id` |
| `saved_path` | `varchar(600)` | 是 | 否 | 存储路径 | 现有代码语义为样本存储目录;改造后建议存 MinIO 逻辑路径 |
| `original_filename` | `varchar(200)` | 是 | 否 | 原始文件名称 | 现有代码支持图片、声音、视频等样本原始名称 |
| `saved_filename` | `varchar(200)` | 是 | 否 | 保存后文件名 | 现有代码常见格式如 `00000001.jpg` 或带数据集编号前缀 |
| `saved_filesize` | `varchar(10)` | 是 | 否 | 保存文件大小 | 现有代码旧模型字段说明存在差异,需按新表结构控制长度 |
| `rectangle` | `varchar(2000)` | 否 | 否 | 矩形框标注内容 | 新表结构字段,用于目标检测类标注 |
| `polygon` | `text` | 否 | 否 | 多边形标注内容 | 新表结构字段,用于分割、多边形标注 |
| `status` | `varchar(2)` | 是 | 否 | 样本状态 | 代码枚举:`00` 初始创建,`01` 已分配,`02` 已标注 |
| `create_time` | `timestamptz` | 是 | 否 | 创建时间 | 样本创建时间 |
| `custom1` | `varchar(200)` | 否 | 否 | 备用1 | 现有代码常用于记录图像尺寸,如 `1024x768` |
| `custom3` | `varchar(200)` | 否 | 否 | 备用3 | 备用扩展字段 |
| `custom2` | `varchar(1000)` | 否 | 否 | 备用2 | 备用扩展字段 |
### 4.3 枚举字段说明
#### `status`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `00` | 初始创建 | 来自模型 `AiDatasetSample.status` |
| `01` | 已分配 | 来自模型 `AiDatasetSample.status` |
| `02` | 已标注 | 来自模型 `AiDatasetSample.status` |
### 4.4 标注字段说明
| 字段 | 中文含义 | 当前代码情况 |
|------|----------|--------------|
| `rectangle` | 矩形框标注内容 | 当前项目旧代码主要使用 `annotation_content` 存储目标检测标注,后续需映射到该字段 |
| `polygon` | 多边形标注内容 | 当前项目旧代码主要通过 `annotation_content` 或外部 JSON 文件承载分割结果,后续需映射到该字段 |
---
## 5. `ai_temp_file` 临时文件表
### 5.1 表说明
- 表名:`ai_temp_file`
- 中文名称:临时文件表
- 主键:`id`
- 用途:记录上传到 MinIO `tempfile` 桶中的 ZIP、视频、图片、音频等临时文件
- 当前代码实现状态:暂无正式模型、序列化器和业务接口
### 5.2 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| `original_path` | `varchar(600)` | 否 | 否 | 原始文件路径 | 原始上传路径或逻辑来源路径 |
| `original_name` | `varchar(200)` | 是 | 否 | 原始文件名称 | 上传文件原名称 |
| `original_type` | `varchar(20)` | 是 | 否 | 原始文件类型 | 当前代码暂无正式枚举实现,见下方建议值 |
| `bucket_name` | `varchar(200)` | 否 | 否 | MinIO 桶名称 | 目标设计为 `tempfile` |
| `object_name` | `varchar(200)` | 否 | 否 | 对象名称 | MinIO 对象名 |
| `object_size` | `int8` | 否 | 否 | 对象大小 | 文件字节数 |
| `content_type` | `varchar(100)` | 否 | 否 | 对象类型 | MIME Type例如 `image/jpeg`、`video/mp4` |
| `status` | `varchar(2)` | 是 | 否 | 状态 | 当前代码暂无正式枚举实现,见下方建议值 |
| `create_time` | `timestamptz` | 是 | 否 | 创建时间 | 上传记录创建时间 |
| `custom1` | `varchar(200)` | 否 | 否 | 备用1 | 扩展字段 |
| `custom3` | `varchar(200)` | 否 | 否 | 备用3 | 扩展字段 |
| `custom2` | `varchar(1000)` | 否 | 否 | 备用2 | 扩展字段 |
### 5.3 枚举字段说明
#### `original_type`
说明:当前项目代码中暂无正式实现,以下为《系统功能调整改造说明.md》中的建议枚举。
| 值 | 含义 | 说明 |
|----|------|------|
| `01` | 图片 | 建议值 |
| `02` | 视频 | 建议值 |
| `03` | 音频 | 建议值 |
| `04` | ZIP 压缩包 | 建议值 |
| `05` | 文本 | 建议值 |
| `99` | 其他 | 建议值 |
#### `status`
说明:当前项目代码中暂无正式实现,以下为《系统功能调整改造说明.md》中的建议枚举。
| 值 | 含义 | 说明 |
|----|------|------|
| `01` | 已上传 | 建议值 |
| `02` | 已导入数据集 | 建议值 |
| `03` | 已失效 | 建议值 |
| `09` | 已删除 | 建议值 |
---
## 6. `ai_annotate_task` 标注任务表
### 6.1 表说明
- 表名:`ai_annotate_task`
- 中文名称:标注任务表
- 主键:`id`
- 用途:记录面向单一数据集的标注任务主信息
- 现有代码对应模型:`AiDatasetTask`
- 当前代码旧表映射:`ai_dataset_task`
### 6.2 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| `algorithm_id` | `varchar(40)` | 是 | 否 | 算法ID | 关联算法或算法定义 |
| `task_name` | `varchar(200)` | 是 | 否 | 任务名称 | 标注任务名称 |
| `annotate_type` | `varchar(2)` | 是 | 否 | 标注类型 | 代码枚举见下文 |
| `description` | `varchar(2000)` | 否 | 否 | 对本次标注任务的描述 | 无枚举 |
| `dataset_id` | `varchar(40)` | 是 | 否 | 数据集ID | 单数据集标注任务关联字段 |
| `task_count` | `int4` | 否 | 否 | 需要标注的样本记录总数 | 任务样本总量 |
| `task_range` | `varchar(100)` | 否 | 否 | 任务数据起止范围 | 样本范围描述 |
| `task_type` | `varchar(2)` | 否 | 否 | 自动标注类型 | 代码枚举见下文 |
| `region_type` | `varchar(2)` | 否 | 否 | 标签类型 | 代码枚举见下文 |
| `labels` | `varchar(2000)` | 否 | 否 | 标签定义 | 现有代码约定为 JSON 字符串 |
| `work_type` | `varchar(2)` | 是 | 否 | 工作方式 | 代码枚举见下文 |
| `task_team` | `varchar(40)` | 否 | 否 | 任务团队 | 团队标注时使用 |
| `task_leader` | `varchar(40)` | 否 | 否 | 任务负责人 | 团队负责人 |
| `status` | `varchar(2)` | 是 | 否 | 任务状态 | 代码枚举见下文 |
| `creator` | `varchar(20)` | 是 | 否 | 任务创建人 | 用户名 |
| `create_time` | `timestamptz` | 是 | 否 | 任务创建时间 | 创建时间 |
| `custom1` | `varchar(200)` | 否 | 否 | 备用1 | 扩展字段 |
| `custom2` | `varchar(200)` | 否 | 否 | 备用2 | 扩展字段 |
| `custom3` | `varchar(200)` | 否 | 否 | 备用3 | 扩展字段 |
### 6.3 枚举字段说明
#### `annotate_type`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `01` | 图像分类 | 来自模型 `AiDatasetTask.annotate_type` |
| `02` | 物体检测 | 来自模型 `AiDatasetTask.annotate_type` |
| `03` | 语义分割 | 来自模型 `AiDatasetTask.annotate_type` |
| `05` | 声音分类 | 来自模型 `AiDatasetTask.annotate_type` |
| `10` | 文本分类 | 来自模型 `AiDatasetTask.annotate_type` |
补充说明:
- 在当前代码 `dataset_task.py` 中,当 `task_type=1``region_type=1` 时,会自动将 `annotate_type` 置为 `03`
-`task_type=1``region_type=0` 时,会自动将 `annotate_type` 置为 `01`
#### `work_type`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `01` | 单人标注 | 缺省为任务创建者 |
| `02` | 团队标注 | 需要 `task_team`、`task_leader` 等信息 |
#### `task_type`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `0` | 手动标注 | 来自模型 `AiDatasetTask.task_type` |
| `1` | 自动标注 | 来自模型 `AiDatasetTask.task_type` |
#### `region_type`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `0` | 矩形 | 来自模型 `AiDatasetTask.region_type` |
| `1` | 多边形 | 来自模型 `AiDatasetTask.region_type` |
#### `status`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `01` | 初始创建 | 来自模型 `AiDatasetTask.status` |
| `02` | 任务分配 | 来自模型 `AiDatasetTask.status` |
| `03` | 任务完成 | 来自模型 `AiDatasetTask.status` |
| `09` | 标记删除 | 来自模型 `AiDatasetTask.status` |
---
## 7. `ai_annotate_task_sample` 标注任务样本表
### 7.1 表说明
- 表名:`ai_annotate_task_sample`
- 中文名称:标注任务样本表
- 主键:`id`
- 用途:记录标注任务中分配给执行人的样本、标注内容和审核流转状态
- 现有代码对应模型:`AiDatasetTaskSample`
- 当前代码旧表映射:`ai_dataset_task_sample`
### 7.2 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| `task_id` | `varchar(40)` | 是 | 否 | 关联任务ID | 对应 `ai_annotate_task.id` |
| `executor` | `varchar(100)` | 是 | 否 | 任务执行人 | 执行标注的账号 |
| `sample_id` | `varchar(40)` | 是 | 否 | 样本ID | 对应 `ai_dataset_sample.id` |
| `sample_path` | `varchar(600)` | 是 | 否 | 样本存储路径 | 分配样本时带入 |
| `sample_name` | `varchar(200)` | 是 | 否 | 样本名称 | 分配样本时带入 |
| `hard` | `varchar(2)` | 是 | 否 | 是否难例 | 代码枚举见下文 |
| `annotation_content` | `text` | 否 | 否 | 标注内容 | 当前代码主要以 JSON 形式存储 |
| `class_label` | `varchar(200)` | 否 | 否 | 分类标签 | 分类场景使用 |
| `annotation_time` | `timestamptz` | 否 | 否 | 标注时间 | 提交标注时间 |
| `status` | `varchar(2)` | 是 | 否 | 样本状态 | 代码枚举见下文 |
| `auditor` | `varchar(20)` | 否 | 否 | 审核人 | 审核人账号 |
| `feedback` | `varchar(400)` | 否 | 否 | 驳回意见 | 审核驳回意见 |
| `custom1` | `varchar(200)` | 否 | 否 | 备用1 | 扩展字段 |
| `custom2` | `varchar(200)` | 否 | 否 | 备用2 | 扩展字段 |
| `custom3` | `varchar(200)` | 否 | 否 | 备用3 | 扩展字段 |
### 7.3 枚举字段说明
#### `hard`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `0` | 否 | 来自模型 `AiDatasetTaskSample.hard` |
| `1` | 是 | 来自模型 `AiDatasetTaskSample.hard` |
#### `status`
| 值 | 含义 | 代码说明 |
|----|------|----------|
| `01` | 初始分配 | 来自模型 `AiDatasetTaskSample.status` |
| `02` | 标注完成 | 来自模型 `AiDatasetTaskSample.status` |
| `03` | 提交审核 | 来自模型 `AiDatasetTaskSample.status` |
| `04` | 审核已阅 | 来自模型 `AiDatasetTaskSample.status` |
| `05` | 审核驳回 | 来自模型 `AiDatasetTaskSample.status` |
| `06` | 审核后入库 | 来自模型 `AiDatasetTaskSample.status`,表示加入主标签中 |
### 7.4 标注内容说明
| 字段 | 中文含义 | 代码说明 |
|------|----------|----------|
| `annotation_content` | 标注内容 | 当前代码中一般为 JSON 字符串,目标检测保存框信息,分割保存多边形信息 |
| `class_label` | 分类标签 | 图像分类、声音分类、文本分类等场景使用 |
---
## 8. `ai_smart_terminal` 智能终端数据表
### 8.1 表说明
- 表名:`ai_smart_terminal`
- 中文名称:智能终端数据表(云端孪生镜像)
- 主键:`id`
- 用途:作为边缘端实体设备在云端的孪生镜像,记录设备基本信息、位置坐标、监测配置,以及云端模型发布版本和边缘端同步状态。模型训练完成后发布到该云端孪生设备;边缘端实体设备定期轮询检测云端孪生设备上的模型版本,当检测到新版本时自动下载更新,实现边缘端算法模型的动态更新。
- 来源Oracle `SD_AIBOX_B_H`AI边缘计算盒子基本属性表
- 当前代码实现状态:暂无正式模型、序列化器和业务接口
### 8.2 业务场景
```
┌─────────────────────────────────────────────────────────────┐
│ 云端孪生镜像 │
│ ai_smart_terminal │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 基本信息:终端编码(stcd)、名称(stnm)、分类(sttp) │ │
│ │ 位置信息:经纬度、高程、电站/基地/流域归属 │ │
│ │ 设备配置AI盒子配置、IP、SIM、联系人 │ │
│ │ 监测配置:监测指标、采集频次、监测方式 │ │
│ │ │ │
│ │ 模型发布 ─────────────────────────────┐ │ │
│ │ model_id / model_version │ │ │
│ │ model_path / model_publish_time │ │ │
│ │ ▼ │ │
│ │ 边缘同步状态 ◄──── 边缘端定期轮询(sync_check_interval) │ │
│ │ edge_model_version / edge_update_time │ │
│ │ last_heartbeat_time / online_status │ │ │
│ └────────────────────────────────────────│──────────────┘ │
│ │ │
└───────────────────────────────────────────│──────────────────┘
┌───────────────────────▼──────────────────┐
│ 边缘端实体设备 │
│ 定期检测 model_version ≠ edge_model_ver │
│ → 下载 model_path 指向的模型文件 │
│ → 更新本地模型 → 上报 edge_model_version │
└──────────────────────────────────────────┘
```
### 8.3 字段说明
| 字段名 | 类型 | 非空 | 主键 | 中文说明 | 枚举/代码说明 |
|------|------|------|------|----------|---------------|
| `id` | `varchar(40)` | 是 | 是 | 主键ID | UUID 字符串 |
| **基本信息** |
| `stcd` | `varchar(40)` | 是 | 否 | 终端编码 | 与边缘实体设备一一对应的唯一编码 |
| `stnm` | `varchar(255)` | 是 | 否 | 终端名称 | 终端名称 |
| `sttp` | `varchar(2)` | 是 | 否 | 终端分类 | `01` 鱼类识别AI盒子`02` 鸟类识别AI盒子`03` 野生动物识别AI盒子`04` 鱼类分拣装置 |
| `order_index` | `int4` | 否 | 否 | 排序 | 列表展示排序号 |
| **位置信息** |
| `lgtd` | `numeric(10,6)` | 否 | 否 | 经度(单位:°) | 终端经度坐标 |
| `lttd` | `numeric(10,6)` | 否 | 否 | 纬度(单位:°) | 终端纬度坐标 |
| `elev` | `numeric(10,6)` | 否 | 否 | 高程单位m | 终端海拔高程 |
| `rstcd` | `varchar(64)` | 否 | 否 | 所属电站编码 | 关联电站编码 |
| `base_id` | `varchar(64)` | 否 | 否 | 所属水电基地编码 | 关联水电基地编码 |
| `hbrvcd` | `varchar(64)` | 否 | 否 | 所属水电基地流域编码 | 关联水电基地流域编码 |
| `rvcd` | `varchar(64)` | 否 | 否 | 所属流域编码 | 关联流域编码 |
| **设备配置** |
| `aipz` | `varchar(1000)` | 否 | 否 | AI盒子配置 | AI边缘计算盒子硬件/软件配置信息 |
| `ipaddr` | `varchar(512)` | 否 | 否 | IP地址 | 设备IP地址 |
| `siminfo` | `varchar(512)` | 否 | 否 | SIM卡信息 | SIM卡相关信息 |
| `lxr` | `varchar(512)` | 否 | 否 | 联系人及联系电话 | 站点联系人信息 |
| `purpose` | `varchar(512)` | 否 | 否 | 用途 | 站点用途说明 |
| **监测配置** |
| `stindx` | `varchar(1000)` | 否 | 否 | 监测指标 | 该终端监测的指标列表 |
| `dtfrqcy` | `int4` | 否 | 否 | 数据采集频次单位min | 数据采集间隔(分钟) |
| `mway` | `int2` | 否 | 否 | 监测方式 | `0` 人工监测,`1` 自动监测,`2` 混合监测 |
| **启用与接入状态** |
| `usfl` | `int2` | 否 | 否 | 是否启用 | `0` 否,`1` 是 |
| `dtin` | `int2` | 否 | 否 | 数据是否接入 | `0` 未接入,`1` 已接入 |
| `dtin_tm` | `timestamptz` | 否 | 否 | 数据接入时间 | 数据首次接入系统的时间 |
| **云端孪生 — 模型发布** |
| `model_id` | `varchar(40)` | 否 | 否 | 已部署模型ID | 关联训练产出的模型记录 |
| `model_name` | `varchar(200)` | 否 | 否 | 已部署模型名称 | 关联训练产出的模型记录 |
| `model_version` | `varchar(64)` | 否 | 否 | 已部署模型版本号 | 云端孪生设备上当前发布的模型版本,如 `v1.2.3` |
| `model_path` | `varchar(600)` | 否 | 否 | 模型文件存储路径 | MinIO 中模型文件的对象路径,边缘端从此路径下载 |
| `model_publish_time` | `timestamptz` | 否 | 否 | 模型发布时间 | 模型发布到云端孪生设备的时间 |
| `model_publish_user` | `varchar(36)` | 否 | 否 | 模型发布人 | 执行模型发布操作的用户 |
| **边缘端 — 同步状态** |
| `edge_model_version` | `varchar(64)` | 否 | 否 | 边缘端模型版本 | 边缘实体设备当前实际运行的模型版本 |
| `edge_update_time` | `timestamptz` | 否 | 否 | 边缘端更新时间 | 边缘设备最后一次完成模型更新的时间 |
| `last_heartbeat_time` | `timestamptz` | 否 | 否 | 最后心跳时间 | 边缘端最后一次向云端上报心跳的时间 |
| `online_status` | `int2` | 否 | 否 | 在线状态 | `0` 离线,`1` 在线 |
| `sync_check_interval` | `int4` | 否 | 否 | 同步检测间隔min | 边缘端轮询检测云端孪生设备模型版本的间隔(分钟) |
| **运维记录** |
| `remark` | `varchar(512)` | 否 | 否 | 备注 | 备注信息 |
| `record_user` | `varchar(36)` | 否 | 否 | 创建人 | 创建记录的用户 |
| `record_time` | `timestamptz` | 是 | 否 | 创建时间 | 记录创建时间,默认 `now()` |
| `is_deleted` | `int2` | 是 | 否 | 是否已删除 | `0` 未删除,`1` 已删除,默认 `0` |
### 8.4 核心业务逻辑
**模型发布流程**(云端操作):
1. 模型训练完成后,管理员将评估合格的训练模型模型文件上传至 MinIO记录 `model_path`;
2. 管理员发布训练后新的算法模型版本并更新记录ai_algorithm_models 中
3. 管理员发布更新云端孪生设备的 `model_id`、`model_version`、`model_publish_time`、`model_publish_user`
**边缘同步流程**(边缘端自动):
1. 边缘设备按 `sync_check_interval` 间隔轮询查询云端孪生设备
2. 比较 `model_version`(云端)与 `edge_model_version`(边缘端)
3. 若不一致,从 `model_path` 下载新模型文件
4. 更新本地模型,上报 `edge_model_version`、`edge_update_time`
**心跳上报**(边缘端自动):
- 边缘设备定期更新 `last_heartbeat_time``online_status`
- 云端可通过心跳时间判断设备是否在线
### 8.5 枚举字段说明
#### `sttp` — 终端分类
| 值 | 含义 | 说明 |
|----|------|------|
| `01` | 鱼类识别AI盒子 | 用于鱼类识别监测的边缘AI计算设备 |
| `02` | 鸟类识别AI盒子 | 用于鸟类识别监测的边缘AI计算设备 |
| `03` | 野生动物识别AI盒子 | 用于野生动物识别监测的边缘AI计算设备 |
| `04` | 鱼类分拣装置 | 用于鱼类分拣的边缘智能设备 |
#### `usfl` — 是否启用
| 值 | 含义 | 说明 |
|----|------|------|
| `0` | 否 | 未启用 |
| `1` | 是 | 已启用 |
#### `dtin` — 数据是否接入
| 值 | 含义 | 说明 |
|----|------|------|
| `0` | 未接入 | 数据未接入系统 |
| `1` | 已接入 | 数据已接入系统 |
#### `mway` — 监测方式
| 值 | 含义 | 说明 |
|----|------|------|
| `0` | 人工监测 | 人工巡检方式 |
| `1` | 自动监测 | AI自动识别监测 |
| `2` | 混合监测 | 人工+自动混合模式 |
#### `online_status` — 在线状态
| 值 | 含义 | 说明 |
|----|------|------|
| `0` | 离线 | 边缘设备未在线或心跳超时 |
| `1` | 在线 | 边缘设备在线,心跳正常 |
#### `is_deleted` — 是否已删除
| 值 | 含义 | 说明 |
|----|------|------|
| `0` | 未删除 | 默认值 |
| `1` | 已删除 | 逻辑删除标记 |
---
## 9. 枚举字段汇总
### 9.1 数据集类
| 表名 | 字段 | 枚举说明 |
|------|------|----------|
| `ai_dataset` | `dataset_type` | `01` 表格,`02` 图片,`03` 视频,`04` 音频,`05` 文本 |
| `ai_dataset` | `status` | `00` 未生成图片,`01` 初始创建,`02` 标注完成,`09` 标记删除 |
| `ai_dataset_sample` | `status` | `00` 初始创建,`01` 已分配,`02` 已标注 |
### 9.2 临时文件类
| 表名 | 字段 | 枚举说明 |
|------|------|----------|
| `ai_temp_file` | `original_type` | 当前代码暂无实现,建议值:图片/视频/音频/ZIP/文本/其他 |
| `ai_temp_file` | `status` | 当前代码暂无实现,建议值:已上传/已导入/已失效/已删除 |
### 9.3 标注任务类
| 表名 | 字段 | 枚举说明 |
|------|------|----------|
| `ai_annotate_task` | `annotate_type` | `01` 图像分类,`02` 物体检测,`03` 语义分割,`05` 声音分类,`10` 文本分类 |
| `ai_annotate_task` | `work_type` | `01` 单人标注,`02` 团队标注 |
| `ai_annotate_task` | `task_type` | `0` 手动标注,`1` 自动标注 |
| `ai_annotate_task` | `region_type` | `0` 矩形,`1` 多边形 |
| `ai_annotate_task` | `status` | `01` 初始创建,`02` 任务分配,`03` 任务完成,`09` 标记删除 |
| `ai_annotate_task_sample` | `hard` | `0` 否,`1` 是 |
| `ai_annotate_task_sample` | `status` | `01` 初始分配,`02` 标注完成,`03` 提交审核,`04` 审核已阅,`05` 审核驳回,`06` 审核后入库 |
### 9.4 智能终端类
| 表名 | 字段 | 枚举说明 |
|------|------|----------|
| `ai_smart_terminal` | `sttp` | `01` 鱼类识别AI盒子`02` 鸟类识别AI盒子`03` 野生动物识别AI盒子`04` 鱼类分拣装置 |
| `ai_smart_terminal` | `usfl` | `0` 否,`1` 是 |
| `ai_smart_terminal` | `dtin` | `0` 未接入,`1` 已接入 |
| `ai_smart_terminal` | `mway` | `0` 人工监测,`1` 自动监测,`2` 混合监测 |
| `ai_smart_terminal` | `online_status` | `0` 离线,`1` 在线 |
| `ai_smart_terminal` | `is_deleted` | `0` 未删除,`1` 已删除 |
---
## 10. 设计与实现说明
### 10.1 当前代码与新表的映射差异
| 新表名 | 当前代码模型 | 当前旧表名 |
|------|--------------|------------|
| `ai_dataset` | `AiDataset` | `ai_algorithm_dataset` |
| `ai_dataset_sample` | `AiDatasetSample` | `ai_dataset_sample` |
| `ai_temp_file` | 暂无 | 暂无 |
| `ai_annotate_task` | `AiDatasetTask` | `ai_dataset_task` |
| `ai_annotate_task_sample` | `AiDatasetTaskSample` | `ai_dataset_task_sample` |
| `ai_smart_terminal` | 暂无 | 暂无 |
### 10.2 当前最主要的结构改造点
- `ai_dataset`:需要去掉旧模型中与算法强绑定的旧表映射差异
- `ai_dataset_sample`:需要从旧字段 `annotation_content``rectangle/polygon` 过渡
- `ai_temp_file`需要补齐模型、接口、MinIO 业务落库逻辑
- `ai_annotate_task`:需要将旧标注任务模型切换到新表名
- `ai_annotate_task_sample`:需要将旧标注任务样本模型切换到新表名
- `ai_smart_terminal`:需要补齐 Django 模型、序列化器、CRUD 接口及前端管理页面;实现模型发布到云端孪生设备、边缘端心跳上报与版本同步接口
### 10.3 与 MinIO 的关系
| 表名 | 建议 MinIO 桶 | 说明 |
|------|---------------|------|
| `ai_temp_file` | `tempfile` | 临时上传文件统一存放 |
| `ai_dataset_sample` | `dataset` | 正式数据集样本文件统一存放 |
---
## 11. 结论
本次数据库结构说明对应的是“数据集 + 临时文件 + 标注任务 + 智能终端”主业务链路。
其中:
- `ai_dataset` 负责数据集主记录
- `ai_dataset_sample` 负责正式样本记录
- `ai_temp_file` 负责临时上传文件记录
- `ai_annotate_task` 负责单数据集标注任务
- `ai_annotate_task_sample` 负责标注任务样本流转
- `ai_smart_terminal` 负责边缘设备云端孪生镜像、模型发布与边缘同步状态记录
建议后续开发严格以本说明和 `table.sql` 为基准统一模型定义、接口设计与枚举含义避免再次出现“SQL 已更新、代码仍沿用旧表旧字段”的偏差。