788 lines
11 KiB
Markdown
788 lines
11 KiB
Markdown
# 03-AI知识库系统数据库设计文档.docx
|
||
|
||
《03-AI知识库系统数据库设计文档》
|
||
|
||
版本:V1.0
|
||
|
||
数据库:MySQL 8.x
|
||
|
||
字符集:utf8mb4
|
||
|
||
存储引擎:InnoDB
|
||
|
||
## 第一章 数据库设计原则
|
||
|
||
### 1.1 设计目标
|
||
|
||
数据库设计满足以下要求:
|
||
|
||
• 支持高并发 AI 问答
|
||
|
||
• 满足权限控制
|
||
|
||
• 支持多知识库
|
||
|
||
• 支持后台管理
|
||
|
||
• 支持聊天历史永久保存
|
||
|
||
• 支持日志审计
|
||
|
||
• 支持后续功能扩展
|
||
|
||
### 1.2 命名规范
|
||
|
||
#### 表名
|
||
|
||
全部采用:
|
||
|
||
sys_xxx
|
||
|
||
例如:
|
||
|
||
sys_user
|
||
|
||
sys_chat
|
||
|
||
sys_prompt
|
||
|
||
#### 字段
|
||
|
||
统一采用:
|
||
|
||
snake_case
|
||
|
||
例如:
|
||
|
||
user_id
|
||
|
||
created_at
|
||
|
||
updated_at
|
||
|
||
#### 主键
|
||
|
||
统一:
|
||
|
||
BIGINT
|
||
|
||
AUTO_INCREMENT
|
||
|
||
#### 时间字段
|
||
|
||
统一:
|
||
|
||
created_at
|
||
|
||
updated_at
|
||
|
||
DATETIME 类型。
|
||
|
||
#### 删除
|
||
|
||
采用:
|
||
|
||
is_deleted
|
||
|
||
逻辑删除。
|
||
|
||
(聊天会话删除采用逻辑删除,知识库根据已确认需求允许物理删除。)
|
||
|
||
## 第二章 ER 模型
|
||
|
||
管理员
|
||
|
||
│
|
||
|
||
│
|
||
|
||
├──────────────┐
|
||
|
||
│ │
|
||
|
||
▼ ▼
|
||
|
||
用户 ─────── 用户知识库权限
|
||
|
||
│
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
聊天会话
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
聊天消息
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
AI日志
|
||
|
||
──────────────────────────
|
||
|
||
知识库
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
Prompt
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
模型配置
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
系统配置
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
操作日志
|
||
|
||
## 第三章 数据表清单
|
||
|
||
一期预计数据库包含以下核心数据表:
|
||
|
||
后续可按需要增加统计汇总表、缓存表等。
|
||
|
||
## 第四章 用户表(sys_user)
|
||
|
||
### 功能
|
||
|
||
保存系统普通用户信息。
|
||
|
||
### 字段设计
|
||
|
||
### 索引
|
||
|
||
## 第五章 管理员表(sys_admin)
|
||
|
||
### 功能
|
||
|
||
保存后台管理员账号。
|
||
|
||
### 字段
|
||
|
||
## 第六章 角色表(sys_role)
|
||
|
||
### 字段
|
||
|
||
### 角色示例
|
||
|
||
SUPER_ADMIN
|
||
|
||
ADMIN
|
||
|
||
OPERATOR
|
||
|
||
CUSTOMER_SERVICE
|
||
|
||
## 第七章 知识库表(sys_knowledge)
|
||
|
||
### 功能
|
||
|
||
维护飞书知识库配置。
|
||
|
||
### 字段
|
||
|
||
### 删除规则
|
||
|
||
根据已确认需求:
|
||
|
||
支持物理删除
|
||
|
||
删除前需二次确认
|
||
|
||
自动解除用户权限关联
|
||
|
||
写入操作日志
|
||
|
||
以上完成了数据库设计文档的第一部分。
|
||
|
||
下一部分将继续设计以下核心数据表:
|
||
|
||
sys_user_kb(用户知识库权限)
|
||
|
||
sys_chat_session(聊天会话)
|
||
|
||
sys_chat_message(聊天消息)
|
||
|
||
sys_prompt
|
||
|
||
sys_model
|
||
|
||
sys_system_config
|
||
|
||
sys_operation_log
|
||
|
||
sys_ai_request_log
|
||
|
||
登录日志、短信日志
|
||
|
||
索引设计
|
||
|
||
外键关系
|
||
|
||
数据字典
|
||
|
||
建表 SQL 示例。
|
||
|
||
Grover Reaves 加入了群聊。
|
||
|
||
继续 @ChatGPT
|
||
|
||
ChatGPT15:30
|
||
|
||
## 第八章 用户知识库权限表(sys_user_kb)
|
||
|
||
### 8.1 功能说明
|
||
|
||
用于维护用户与知识库之间的授权关系。
|
||
|
||
支持:
|
||
|
||
一个用户拥有多个知识库
|
||
|
||
一个知识库授权给多个用户
|
||
|
||
永久授权
|
||
|
||
有效期授权
|
||
|
||
属于典型多对多关系表。
|
||
|
||
### 8.2 字段设计
|
||
|
||
### 索引
|
||
|
||
idx_user
|
||
|
||
idx_knowledge
|
||
|
||
idx_expired
|
||
|
||
uk_user_kb
|
||
|
||
(user_id,knowledge_id)
|
||
|
||
防止重复授权。
|
||
|
||
## 第九章 聊天会话表(sys_chat_session)
|
||
|
||
### 功能
|
||
|
||
保存聊天会话。
|
||
|
||
每个聊天对应:
|
||
|
||
一个用户
|
||
|
||
↓
|
||
|
||
多个会话
|
||
|
||
↓
|
||
|
||
一个会话
|
||
|
||
↓
|
||
|
||
多条消息
|
||
|
||
### 字段
|
||
|
||
### 删除规则
|
||
|
||
用户删除:
|
||
|
||
is_deleted=1
|
||
|
||
后台永久保存。
|
||
|
||
## 第十章 聊天消息表(sys_chat_message)
|
||
|
||
### 功能
|
||
|
||
保存全部聊天内容。
|
||
|
||
### 字段
|
||
|
||
### 状态
|
||
|
||
WAITING
|
||
|
||
GENERATING
|
||
|
||
FINISHED
|
||
|
||
STOPPED
|
||
|
||
TIMEOUT
|
||
|
||
FAILED
|
||
|
||
### 索引
|
||
|
||
idx_session
|
||
|
||
idx_user
|
||
|
||
idx_created
|
||
|
||
## 第十一章 AI 请求日志(sys_ai_request_log)
|
||
|
||
### 功能
|
||
|
||
记录 AI 每一次调用。
|
||
|
||
便于:
|
||
|
||
排查问题
|
||
|
||
Token 统计
|
||
|
||
耗时统计
|
||
|
||
飞书异常分析
|
||
|
||
### 字段
|
||
|
||
## 第十二章 Prompt 表(sys_prompt)
|
||
|
||
一期仅维护一条全局 Prompt。
|
||
|
||
### 字段
|
||
|
||
## 第十三章 AI 模型表(sys_model)
|
||
|
||
### 字段
|
||
|
||
### 一期规则
|
||
|
||
始终:
|
||
|
||
enabled=1
|
||
|
||
只能有一条
|
||
|
||
后台切换:
|
||
|
||
自动:
|
||
|
||
旧模型=0
|
||
|
||
新模型=1
|
||
|
||
## 第十四章 系统配置表(sys_system_config)
|
||
|
||
采用:
|
||
|
||
Key
|
||
|
||
Value
|
||
|
||
方式。
|
||
|
||
### 字段
|
||
|
||
### 示例数据
|
||
|
||
## 第十五章 操作日志表(sys_operation_log)
|
||
|
||
### 字段
|
||
|
||
## 第十六章 登录日志(sys_login_log)
|
||
|
||
### 字段
|
||
|
||
## 第十七章 短信日志(sys_sms_log)
|
||
|
||
### 字段
|
||
|
||
安全建议: 正式生产环境不要明文保存验证码,可仅保存哈希值或脱敏信息。
|
||
|
||
## 第十八章 外键关系
|
||
|
||
sys_user
|
||
|
||
│
|
||
|
||
├──────────────┐
|
||
|
||
│ │
|
||
|
||
▼ ▼
|
||
|
||
sys_chat_session sys_user_kb
|
||
|
||
│ │
|
||
|
||
▼ ▼
|
||
|
||
sys_chat_message sys_knowledge
|
||
|
||
sys_admin
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
sys_operation_log
|
||
|
||
sys_model
|
||
|
||
│
|
||
|
||
▼
|
||
|
||
sys_ai_request_log
|
||
|
||
数据库层面建议尽量少使用物理外键约束,由应用层保证数据一致性,以降低高并发场景下的维护成本。
|
||
|
||
## 第十九章 索引规范
|
||
|
||
所有业务表统一包含:
|
||
|
||
PRIMARY KEY(id)
|
||
|
||
created_at
|
||
|
||
updated_at
|
||
|
||
常用查询字段建立普通索引:
|
||
|
||
phone
|
||
|
||
user_id
|
||
|
||
session_id
|
||
|
||
knowledge_id
|
||
|
||
status
|
||
|
||
last_login_at
|
||
|
||
唯一字段建立唯一索引:
|
||
|
||
手机号
|
||
|
||
管理员用户名
|
||
|
||
用户+知识库授权关系
|
||
|
||
## 第二十章 数据库规范
|
||
|
||
### 字符集
|
||
|
||
utf8mb4
|
||
|
||
### 排序规则
|
||
|
||
utf8mb4_unicode_ci
|
||
|
||
### 引擎
|
||
|
||
InnoDB
|
||
|
||
### 主键
|
||
|
||
BIGINT AUTO_INCREMENT
|
||
|
||
### 时间字段
|
||
|
||
统一:
|
||
|
||
DATETIME
|
||
|
||
### 事务
|
||
|
||
涉及以下操作必须使用事务:
|
||
|
||
用户创建
|
||
|
||
批量授权知识库
|
||
|
||
批量删除用户
|
||
|
||
删除知识库并解除权限关联
|
||
|
||
管理员批量操作
|
||
|
||
## 第二十一章 数据字典规范
|
||
|
||
建议为每张表维护一份数据字典,包含:
|
||
|
||
该数据字典可同步导出为 数据库设计.xlsx,供开发、测试及运维共同使用。
|
||
|
||
## 《数据库设计文档》第一版完成
|
||
|
||
目前数据库设计已覆盖:
|
||
|
||
用户体系
|
||
|
||
管理员体系
|
||
|
||
角色体系
|
||
|
||
知识库管理
|
||
|
||
用户知识库授权
|
||
|
||
聊天会话
|
||
|
||
聊天消息
|
||
|
||
AI 请求日志
|
||
|
||
Prompt 管理
|
||
|
||
模型管理
|
||
|
||
系统配置
|
||
|
||
登录日志
|
||
|
||
短信日志
|
||
|
||
操作日志
|
||
|
||
外键关系
|
||
|
||
索引规范
|
||
|
||
数据库设计规范
|
||
|
||
## Table 1
|
||
| 序号 | 表名 | 用途 |
|
||
| --- | --- | --- |
|
||
| 1 | sys_user | 用户 |
|
||
| 2 | sys_admin | 管理员 |
|
||
| 3 | sys_role | 管理员角色 |
|
||
| 4 | sys_user_kb | 用户知识库权限 |
|
||
| 5 | sys_knowledge | 知识库 |
|
||
| 6 | sys_chat_session | 聊天会话 |
|
||
| 7 | sys_chat_message | 聊天消息 |
|
||
| 8 | sys_prompt | Prompt 配置 |
|
||
| 9 | sys_model | AI 模型 |
|
||
| 10 | sys_system_config | 系统配置 |
|
||
| 11 | sys_operation_log | 操作日志 |
|
||
| 12 | sys_login_log | 登录日志 |
|
||
| 13 | sys_ai_request_log | AI 请求日志 |
|
||
| 14 | sys_sms_log | 短信发送日志 |
|
||
|
||
## Table 2
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | BIGINT | 主键 |
|
||
| phone | VARCHAR(20) | 手机号(唯一) |
|
||
| name | VARCHAR(50) | 姓名 |
|
||
| nickname | VARCHAR(50) | 昵称 |
|
||
| status | TINYINT | 账号状态(0=禁用,1=启用) |
|
||
| daily_chat_limit | INT | 每日聊天额度(可覆盖全局配置) |
|
||
| daily_chat_used | INT | 当日已使用次数 |
|
||
| effective_at | DATETIME | 生效时间 |
|
||
| expired_at | DATETIME | 到期时间(可为空,表示永久) |
|
||
| last_login_at | DATETIME | 最后登录时间 |
|
||
| created_at | DATETIME | 创建时间 |
|
||
| updated_at | DATETIME | 更新时间 |
|
||
| is_deleted | TINYINT | 逻辑删除 |
|
||
|
||
## Table 3
|
||
| 名称 | 类型 |
|
||
| --- | --- |
|
||
| pk_id | 主键 |
|
||
| uk_phone | 唯一索引 |
|
||
| idx_status | 普通索引 |
|
||
|
||
## Table 4
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | BIGINT | 主键 |
|
||
| username | VARCHAR(50) | 登录账号(唯一) |
|
||
| password | VARCHAR(255) | 密码(加密存储) |
|
||
| name | VARCHAR(50) | 姓名 |
|
||
| role_id | BIGINT | 角色ID |
|
||
| status | TINYINT | 状态 |
|
||
| last_login_at | DATETIME | 最后登录 |
|
||
| created_at | DATETIME | 创建时间 |
|
||
| updated_at | DATETIME | 更新时间 |
|
||
|
||
## Table 5
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| role_name | VARCHAR(50) |
|
||
| role_code | VARCHAR(50) |
|
||
| description | VARCHAR(255) |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 6
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| name | VARCHAR(100) |
|
||
| feishu_space_id | VARCHAR(100) |
|
||
| feishu_node_id | VARCHAR(100) |
|
||
| status | TINYINT |
|
||
| remark | VARCHAR(255) |
|
||
| created_at | DATETIME |
|
||
| updated_at | DATETIME |
|
||
|
||
## Table 7
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | BIGINT | 主键 |
|
||
| user_id | BIGINT | 用户ID |
|
||
| knowledge_id | BIGINT | 知识库ID |
|
||
| effective_at | DATETIME | 生效时间 |
|
||
| expired_at | DATETIME | 到期时间(NULL=永久) |
|
||
| created_by | BIGINT | 创建管理员 |
|
||
| created_at | DATETIME | 创建时间 |
|
||
| updated_at | DATETIME | 更新时间 |
|
||
|
||
## Table 8
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| user_id | BIGINT |
|
||
| title | VARCHAR(100) |
|
||
| message_count | INT |
|
||
| last_message_at | DATETIME |
|
||
| is_deleted | TINYINT |
|
||
| created_at | DATETIME |
|
||
| updated_at | DATETIME |
|
||
|
||
## Table 9
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| session_id | BIGINT |
|
||
| user_id | BIGINT |
|
||
| role | ENUM(user,assistant) |
|
||
| content | LONGTEXT |
|
||
| message_status | VARCHAR(20) |
|
||
| token_input | INT |
|
||
| token_output | INT |
|
||
| response_time_ms | INT |
|
||
| model_id | BIGINT |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 10
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| session_id | BIGINT |
|
||
| message_id | BIGINT |
|
||
| user_id | BIGINT |
|
||
| model_name | VARCHAR(100) |
|
||
| prompt | LONGTEXT |
|
||
| knowledge_ids | VARCHAR(500) |
|
||
| retrieve_count | INT |
|
||
| input_token | INT |
|
||
| output_token | INT |
|
||
| total_token | INT |
|
||
| cost_ms | INT |
|
||
| status | VARCHAR(20) |
|
||
| error_message | TEXT |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 11
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| prompt_content | LONGTEXT |
|
||
| updated_by | BIGINT |
|
||
| updated_at | DATETIME |
|
||
|
||
## Table 12
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| provider | VARCHAR(50) |
|
||
| model_name | VARCHAR(100) |
|
||
| api_url | VARCHAR(255) |
|
||
| api_key | TEXT |
|
||
| temperature | DECIMAL(3,2) |
|
||
| max_token | INT |
|
||
| timeout_second | INT |
|
||
| enabled | TINYINT |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 13
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| config_key | VARCHAR(100) |
|
||
| config_value | TEXT |
|
||
| description | VARCHAR(255) |
|
||
| updated_by | BIGINT |
|
||
| updated_at | DATETIME |
|
||
|
||
## Table 14
|
||
| Key | Value |
|
||
| --- | --- |
|
||
| login_days | 30 |
|
||
| daily_chat_limit | 100 |
|
||
| ai_timeout | 30 |
|
||
| feishu_retry | 2 |
|
||
| show_reference | true |
|
||
| allow_network | false |
|
||
| context_mode | token |
|
||
| context_value | 8192 |
|
||
|
||
## Table 15
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| admin_id | BIGINT |
|
||
| module | VARCHAR(50) |
|
||
| action | VARCHAR(50) |
|
||
| target_id | BIGINT |
|
||
| before_json | LONGTEXT |
|
||
| after_json | LONGTEXT |
|
||
| ip | VARCHAR(50) |
|
||
| result | VARCHAR(20) |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 16
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| login_type | VARCHAR(20) |
|
||
| user_id | BIGINT |
|
||
| phone | VARCHAR(20) |
|
||
| ip | VARCHAR(50) |
|
||
| device | VARCHAR(255) |
|
||
| result | VARCHAR(20) |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 17
|
||
| 字段 | 类型 |
|
||
| --- | --- |
|
||
| id | BIGINT |
|
||
| phone | VARCHAR(20) |
|
||
| sms_type | VARCHAR(50) |
|
||
| verify_code | VARCHAR(10) |
|
||
| status | VARCHAR(20) |
|
||
| provider | VARCHAR(50) |
|
||
| created_at | DATETIME |
|
||
|
||
## Table 18
|
||
| 字段 | 类型 | 默认值 | 是否为空 | 说明 |
|
||
| --- | --- | --- | --- | --- |
|
||
| (字段) | (类型) | (默认值) | (是否为空) | (说明) |
|