595 lines
30 KiB
Markdown
595 lines
30 KiB
Markdown
# 系统数据库表结构说明
|
||
|
||
## 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 已更新、代码仍沿用旧表旧字段”的偏差。
|