Files
QuestionProject/ai_knowledge_base_v2/extracted/03-AI知识库系统数据库设计文档.md

11 KiB
Raw Blame History

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

字段 类型 默认值 是否为空 说明
(字段) (类型) (默认值) (是否为空) (说明)