Start AI knowledge base v2 workspace
This commit is contained in:
787
ai_knowledge_base_v2/extracted/03-AI知识库系统数据库设计文档.md
Normal file
787
ai_knowledge_base_v2/extracted/03-AI知识库系统数据库设计文档.md
Normal file
@@ -0,0 +1,787 @@
|
||||
# 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
|
||||
| 字段 | 类型 | 默认值 | 是否为空 | 说明 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| (字段) | (类型) | (默认值) | (是否为空) | (说明) |
|
||||
Reference in New Issue
Block a user