imetting/database.md

16 KiB
Raw Blame History

数据库设计文档

本数据库采用 MySQL 5.7+

1. 表结构概览

  • users: 用户信息表
  • roles: 角色信息表
  • meetings: 会议主表
  • attendees: 参会人员关联表
  • tags: 标签表
  • audio_files: 会议音频文件表
  • attachments: 会议附件表 (未来扩展)
  • transcript_tasks: 语音转录任务表
  • transcript_segments: 语音转录内容分段表
  • meeting_summaries: AI 生成的会议纪要表(由llm_tasks替代)
  • llm_tasks: AI总结任务表
  • prompts: 提示词仓库表
  • knowledge_bases: 知识库主表
  • knowledge_bases_task: 知识库生成任务表
  • dict_data: 字典/码表数据表
  • client_downloads: 客户端下载管理表

2. 表结构详情

2.1. users - 用户表

存储用户信息和登录凭证。

字段名 类型 约束 描述
user_id INT PRIMARY KEY, AUTO_INCREMENT 用户唯一ID
role_id INT NOT NULL, FK 角色ID (关联 roles 表)
username VARCHAR(50) UNIQUE, NOT NULL 登录用户名
caption VARCHAR(50) NOT NULL 用户显示昵称
email VARCHAR(100) UNIQUE, NOT NULL 用户邮箱
password_hash VARCHAR(255) NOT NULL 哈希后的密码
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 账户创建时间

2.1.1 'user_voiceprint' - 用户声纹表

字段名 类型 说明
vp_id INT 主键自增ID
user_id INT 用户ID唯一索引
file_path VARCHAR(255) 音频文件相对路径
file_size INT 文件大小(字节)
duration_seconds DECIMAL(5,2) 音频时长(秒),如 10.25
vector_data TEXT 声纹向量JSON数组如 [0.123, 0.456, ...]
collected_at TIMESTAMP 采集时间
updated_at TIMESTAMP 更新时间

2.2. roles - 角色表

存储用户角色信息。

字段名 类型 约束 描述
role_id INT PRIMARY KEY, AUTO_INCREMENT 角色唯一ID
role_name VARCHAR(50) UNIQUE, NOT NULL 角色名称 (e.g., "admin", "user")

2.3. meetings - 会议表

存储会议的核心元数据。

字段名 类型 约束 描述
meeting_id INT PRIMARY KEY, AUTO_INCREMENT 会议唯一ID
user_id INT FK 会议创建者ID (关联 users 表)
title VARCHAR(255) NOT NULL 会议标题
meeting_time TIMESTAMP NULL 会议召开时间
user_prompt TEXT NULL 用户输入的提示词 (重复)
summary TEXT NULL 会议摘要 (Markdown格式)
tags VARCHAR(1024) NULL 以逗号分隔的标签字符串
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 记录创建时间

2.4. attendees - 参会人表

会议与用户的多对多关联表。

字段名 类型 约束 描述
attendee_id INT PRIMARY KEY, AUTO_INCREMENT 唯一ID
meeting_id INT FK 会议ID (关联 meetings 表)
user_id INT FK 用户ID (关联 users 表)
UNIQUE (meeting_id, user_id)

2.5. tags - 标签表

存储所有唯一的标签及其颜色,用于快速检索和维护。

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 标签唯一ID
name VARCHAR(255) UNIQUE, NOT NULL 标签名称
color VARCHAR(7) DEFAULT '#409EFF' 标签颜色 (HEX)
creator_id INT NOT NULL, COMMENT '创建者用户ID (关联 users 表) '
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间

2.6. audio_files - 音频文件表

存储上传的会议音频文件信息。

字段名 类型 约束 描述
audio_id INT PRIMARY KEY, AUTO_INCREMENT 音频文件唯一ID
meeting_id INT FK 关联的会议ID
file_name VARCHAR(255) 原始文件名
file_path VARCHAR(512) NOT NULL 文件存储相对路径
file_size BIGINT NULL 文件大小 (bytes)
upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP 上传时间

2.7. attachments - 会议附件表

存储会议相关的其他附件如PPT、PDF等。

字段名 类型 约束 描述
attachment_id INT PRIMARY KEY, AUTO_INCREMENT 附件唯一ID
meeting_id INT FK 关联的会议ID
file_name VARCHAR(255) NOT NULL 原始文件名
file_path VARCHAR(512) NOT NULL 文件存储路径或URL
file_type VARCHAR(100) 文件MIME类型
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 上传时间

2.8. transcript_tasks - 转录任务表

记录语音转录任务的状态和元数据。

字段名 类型 约束 描述
task_id VARCHAR(100) PRIMARY KEY 业务任务唯一ID (UUID)
paraformer_task_id VARCHAR(100) NULL 外部服务 (Dashscope) 的任务ID
meeting_id INT NOT NULL, FK 关联的会议ID
status ENUM(...) DEFAULT 'pending' 任务状态: 'pending', 'processing', 'completed', 'failed'
progress INT DEFAULT 0 任务进度百分比 (0-100)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 任务创建时间
completed_at TIMESTAMP NULL 任务完成时间
error_message TEXT NULL 错误信息记录

2.9. transcript_segments - 转录内容分段表

存储转录后的文字内容,按句子和发言人分段。

字段名 类型 约束 描述
segment_id INT PRIMARY KEY, AUTO_INCREMENT 分段唯一ID
meeting_id INT FK 关联的会议ID
speaker_id INT AI识别的原始发言人ID (e.g., 0, 1, 2)
speaker_tag VARCHAR(50) NOT NULL 用户可编辑的发言人标签 (e.g., "张三")
start_time_ms INT NOT NULL 在音频中的开始时间 (毫秒)
end_time_ms INT NOT NULL 在音频中的结束时间 (毫秒)
text_content TEXT NOT NULL 转录的文本内容

2.10. meeting_summaries - 会议纪要表(作废)

存储由LLM生成的会议纪要。

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 纪要唯一ID
meeting_id INT FK 关联的会议ID
summary_content TEXT NULL 生成的纪要内容
user_prompt TEXT NULL 用户输入的额外提示
prompt_id INT FK 关联的提示词模版ID
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 生成时间

2.11. llm_tasks - AI总结任务表

记录异步生成AI总结的任务状态。

字段名 类型 约束 描述
task_id VARCHAR(100) PRIMARY KEY 业务任务唯一ID (UUID)
meeting_id INT NOT NULL, FK 关联的会议ID
prompt_id INT NOT NULL, FK 关联的提示词模版ID
user_prompt TEXT NULL 用户输入的额外提示
status ENUM(...) DEFAULT 'pending' 任务状态: 'pending', 'processing', 'completed', 'failed'
progress INT DEFAULT 0 任务进度百分比 (0-100)
result TEXT NULL 成功时存储生成的纪要内容
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 任务创建时间
completed_at TIMESTAMP NULL 任务完成时间
error_message TEXT NULL 错误信息记录

2.13. knowledge_bases - 知识库表

存储用户生成和管理的知识库条目。

字段名 类型 约束 描述
kb_id INT PRIMARY KEY, AUTO_INCREMENT 知识库条目唯一ID
title VARCHAR(255) NOT NULL 标题
user_prompt TEXT NULL 用户输入的提示词(重复)
content TEXT NULL 生成的知识库内容 (Markdown格式)
creator_id INT NOT NULL, FK 创建者用户ID (关联 users 表)
is_shared BOOLEAN NOT NULL, DEFAULT FALSE 是否为共享知识库 (TRUE: 共享, FALSE: 个人)
source_meeting_ids TEXT NULL 内容来源的会议ID列表 (逗号分隔)
tags VARCHAR(255) NULL 逗号分隔的标签
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 最后更新时间

2.14. knowledge_base_tasks - 知识库生成任务表

记录异步生成知识库内容的AI任务状态。

字段名 类型 约束 描述
task_id VARCHAR(100) PRIMARY KEY 业务任务唯一ID (UUID)
user_id INT NOT NULL, FK 发起任务的用户ID (关联 users 表)
kb_id INT NOT NULL, FK 关联的知识库条目ID (关联 knowledge_bases 表)
prompt_id INT NOT NULL, FK 关联的提示词模版ID
user_prompt TEXT NULL 用户输入的提示词
status ENUM('pending', 'processing', 'completed', 'failed') NOT NULL, DEFAULT 'pending' 任务状态
progress INT DEFAULT 0 任务进度百分比 (0-100)
error_message TEXT NULL 任务失败时的错误信息
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 任务创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 任务状态更新时间
completed_at TIMESTAMP NULL 任务完成时间

2.12. prompts - 提示词仓库表

存储系统中各种任务使用的大模型提示词模板。每个任务类型(会议任务、知识库任务)可以有多个提示词,但只能有一个默认且启用的提示词。

字段名 类型 约束 描述
id INT AUTO_INCREMENT, PRIMARY KEY 提示词唯一ID
name VARCHAR(255) NOT NULL 提示词名称
task_type ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL 任务类型MEETING_TASK-会议任务, KNOWLEDGE_TASK-知识库任务
content TEXT NOT NULL 完整的提示词内容
is_default BOOLEAN NOT NULL, DEFAULT FALSE 是否为该任务类型的默认模板
is_active BOOLEAN NOT NULL, DEFAULT TRUE 是否启用(只有启用的提示词才能被使用)
creator_id INT NOT NULL, FK 创建者用户ID (关联 users 表)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间

约束说明:

  • 每个 task_type 同一时间只能有一个 is_default=TRUE 的提示词
  • 业务逻辑需确保:设置新默认提示词时,自动取消同类型其他提示词的默认状态

2.15. prompt_config - 提示词配置表(已废弃)

该表已废弃,功能整合到 prompts 表的 task_typeis_default 字段。

2.16. dict_data - 字典/码表数据表

存储系统中的码表数据,支持树形结构和扩展属性,用于管理客户端平台类型等配置数据。

字段名 类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 主键ID
dict_type VARCHAR(64) NOT NULL, DEFAULT 'client_platform' 字典类型(如 client_platform
dict_code VARCHAR(64) NOT NULL 业务编码唯一Key如 WIN、IOS、ANDROID
parent_code VARCHAR(64) NOT NULL, DEFAULT 'ROOT' 父级编码ROOT为顶级支持树形结构
tree_path VARCHAR(255) NULL 层级路径(辅助字段,如 0,1,10
label_cn VARCHAR(128) NOT NULL 中文名称
label_en VARCHAR(128) NULL 英文名称
sort_order INT DEFAULT 0 排序权重
extension_attr JSON NULL 扩展属性JSON格式存储平台特有属性
is_default TINYINT DEFAULT 0 是否默认选中0: 否, 1: 是)
status TINYINT DEFAULT 1 状态1: 正常, 0: 停用)
create_time DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
UNIQUE KEY (dict_type, dict_code) 确保编码在同类型下唯一

扩展属性示例extension_attr

{
  "suffix": ".exe",
  "arch_support": ["x86", "x64"],
  "icon": "monitor"
}

树形结构示例:

  • ROOT
    • DESKTOP (桌面端)
      • WIN (Windows)
      • MAC (macOS)
      • LINUX (Linux)
    • MOBILE (移动端)
      • IOS (苹果iOS)
      • ANDROID (安卓)
    • TERMINAL (专用终端)
      • TERM_STD (通用终端)
      • TERM_S100 (中兴终端)

2.17. client_downloads - 客户端下载管理表

存储各平台客户端版本信息,用于管理客户端下载和版本更新。

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 主键ID
platform_code VARCHAR(64) NOT NULL 平台编码(关联 dict_data.dict_code
version VARCHAR(50) NOT NULL 版本号(如 1.0.0
version_code INT NOT NULL 版本号数值(用于版本比较)
download_url VARCHAR(512) NOT NULL 下载链接
file_size BIGINT NULL 文件大小bytes
release_notes TEXT NULL 更新说明
is_active BOOLEAN NOT NULL, DEFAULT TRUE 是否启用
is_latest BOOLEAN NOT NULL, DEFAULT FALSE 是否为最新版本
min_system_version VARCHAR(50) NULL 最低系统版本要求
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间
created_by INT NULL, FK 创建者用户ID关联 users 表)
INDEX (platform_code) 平台编码索引

约束说明:

  • 同一 platform_code 同一时间只应有一个 is_latest=TRUE 的版本
  • platform_code 关联 dict_data 表的 dict_code 字段client_platform类型
  • 业务逻辑需确保:设置新最新版本时,自动取消同平台其他版本的最新状态

相关API接口

  • GET /api/clients/latest/by-platform - 获取最新版本客户端
    • 支持两种调用方式(兼容新旧版本,返回数据结构一致):
      1. 旧版:传 platform_typeplatform_name 参数
      2. 新版:传 platform_code 参数(推荐)
  • POST /api/clients/upload - 上传客户端安装包(管理员)
    • 自动解析APK文件的版本信息
    • 自动读取文件大小并生成下载URL

3. 关系图 (ERD)

erDiagram
    users {
        int user_id PK
        varchar(50) username
        varchar(50) caption
        varchar(100) email
        varchar(255) password_hash
        int role_id FK
        timestamp created_at
    }

    roles {
        int role_id PK
        varchar(50) role_name
    }

    meetings {
        int meeting_id PK
        int user_id FK
        varchar(255) title
        timestamp meeting_time
        text summary
        varchar(1024) tags
        timestamp created_at
    }

    tags {
        int id PK
        varchar(255) name
        varchar(7) color
    }

    attendees {
        int attendee_id PK
        int meeting_id FK
        int user_id FK
    }

    audio_files {
        int audio_id PK
        int meeting_id FK
        varchar(512) file_path
        varchar(100) task_id
    }

    transcript_tasks {
        varchar(100) task_id PK
        int meeting_id FK
        varchar(100) paraformer_task_id
        enum status
        int progress
    }

    transcript_segments {
        int segment_id PK
        int meeting_id FK
        int speaker_id
        varchar(50) speaker_tag
        int start_time_ms
        int end_time_ms
        text text_content
    }

    meeting_summaries {
        int id PK
        int meeting_id FK
        text summary_content
    }

    llm_tasks {
        varchar(100) task_id PK
        int meeting_id FK
        enum status
        int progress
    }

    users ||--o{ meetings : "creates"
    users ||--o{ attendees : "attends"
    users }|..|| roles : "has role"
    meetings ||--|{ attendees : "has"
    meetings ||--|{ audio_files : "has"
    meetings ||--|{ transcript_tasks : "has"
    meetings ||--|{ transcript_segments : "has"
    meetings ||--|{ meeting_summaries : "has"
    meetings ||--|{ llm_tasks : "has"