Files
rag/docs/数据库设计文档.md
lacerate551 cb75b9b274 fix(boundary): 修复多库边界问题、版本管理及删除清理
多库检索与存储修复:
- RRF 融合去重改用 (collection, chunk_id) 复合键,修复同名文件结果被吞
- DocStore 存储路径加 collection 前缀,修复跨库同名切片数据覆盖
- search_multiple 去重改用复合键
- chunk_id 解析改用 rsplit 兼容下划线文件名

上传与版本管理修复:
- 同名文件上传改为覆盖模式,自动清理旧切片
- 修复首次上传不创建版本记录
- 修复覆盖上传版本号回退到 v1
- sync ADDED 分支改用动态版本号生成
- _generate_version_id 改为基于全部版本递增
- 废止/恢复操作同步 SQLite 版本记录
- mark_document_as_superseded 改为仅更新 SQLite

删除清理修复:
- 删除文档时同步清理 SQLite 版本记录和变更日志
- 删除向量库时同步清理该库所有版本记录
- cleanup 改为清理 SQLite 记录而非 ChromaDB

测试:
- test_version_management.py: 27 条版本管理单元测试
- test_edge_cases.py: 28 条边界用例测试
- test_upload_dedup.py: 5 条上传去重测试
- e2e_risk_test.py: 27 条端到端风险测试

文档:
- 新增风险边界问题修复注意事项.md(面向后端的对接文档)
- 新增向量库边界风险分析.md
- 更新多篇现有文档
2026-06-04 23:58:44 +08:00

23 KiB
Raw Permalink Blame History

数据库设计文档

本文档描述 RAG 知识库系统中所有数据库的结构和用途。

架构更新v7.0 重构后,数据库按 prod/dev 环境分离为 4 个独立文件,通过 data/db.py 统一管理。生产模式数据库存放于 data/prod/,开发模式数据库存放于 data/dev/


数据库架构概览

统一数据访问层

所有数据库通过 data/db.py 中的统一接口访问:

from data.db import get_connection, init_databases

# 初始化数据库(首次运行时调用)
init_databases()

# 使用连接可选名称feedback / knowledge / session / exam
with get_connection("feedback") as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM feedbacks WHERE user_id = ?", (user_id,))
    rows = cursor.fetchall()

数据库文件列表

数据库 文件名 存储路径 主要功能 环境
feedback feedback.db data/prod/ 用户反馈、FAQ、质量报告、FAQ 建议 生产 + 开发
knowledge knowledge.db data/prod/ 知识库同步、文档哈希、纲要缓存、版本管理 生产 + 开发
session session.db data/dev/ 会话管理、消息历史、审计日志 仅开发
exam exam.db data/dev/ 题目存储、试卷管理、批阅记录、分析报告 仅开发

1. feedback.db - 反馈系统数据库

存储路径data/prod/feedback.db 环境:生产 + 开发(始终启用) 所属模块services/feedback.py

1.1 feedbacks 表 - 反馈表

字段 类型 说明
id INTEGER 自增主键
session_id TEXT 会话ID
query TEXT 用户问题
answer TEXT 系统回答
sources TEXT 来源文档JSON
rating INTEGER 评分1=赞,-1=踩
reason TEXT 点踩原因
user_id TEXT 用户ID
created_at TIMESTAMP 创建时间

索引

  • idx_feedback_session(session_id)
  • idx_feedback_rating(rating)
  • idx_feedback_created(created_at)

1.2 faqs 表 - FAQ表

字段 类型 说明
id INTEGER 自增主键
question TEXT 问题
answer TEXT 答案
source_documents TEXT 来源文档JSON数组
frequency INTEGER 出现频次
avg_rating REAL 平均评分
status TEXT 状态draft / approved / disabled
created_at TIMESTAMP 创建时间
updated_at TIMESTAMP 更新时间

索引

  • idx_faq_status(status)

1.3 faq_variants 表 - FAQ 问题变体表

字段 类型 说明
id INTEGER 自增主键
faq_id INTEGER 关联 FAQ ID
variant_question TEXT 变体问题
created_at TIMESTAMP 创建时间

索引

  • idx_faq_variant_faq(faq_id)

外键

  • faq_id → faqs(id) ON DELETE CASCADE

作用Multi-Query Indexing为同一 FAQ 存储多种问法变体,提升语义召回率。

1.4 quality_reports 表 - 质量报告表

字段 类型 说明
id INTEGER 自增主键
report_type TEXT 报告类型weekly / monthly
start_date DATE 统计开始日期
end_date DATE 统计结束日期
total_queries INTEGER 总查询数
total_feedback INTEGER 总反馈数
positive_count INTEGER 正面反馈数
negative_count INTEGER 负面反馈数
avg_rating REAL 平均评分
satisfaction_rate REAL 满意度
high_freq_queries TEXT 高频问题JSON
low_rating_queries TEXT 低分问题JSON
improvement_suggestions TEXT 改进建议JSON
created_at TIMESTAMP 创建时间

1.5 faq_suggestions 表 - FAQ建议表

字段 类型 说明
id INTEGER 自增主键
query TEXT 用户问题
answer TEXT 系统回答
frequency INTEGER 出现频次
avg_rating REAL 平均评分
status TEXT 状态pending / approved / rejected
created_at TIMESTAMP 创建时间

作用高频优质问题自动建议沉淀为FAQ管理员审核后生效。


2. session.db - 会话管理数据库

存储路径data/dev/session.db 环境:仅开发模式 所属模块services/session.py

2.1 sessions 表 - 会话表

字段 类型 说明
session_id TEXT 会话IDUUID主键
user_id TEXT 所属用户ID
created_at TIMESTAMP 创建时间
last_active TIMESTAMP 最后活跃时间
metadata TEXT 元数据JSON格式

索引

  • idx_sessions_user(user_id)

作用:实现多用户会话隔离,支持多轮对话记忆。

2.2 messages 表 - 消息历史表

字段 类型 说明
id INTEGER 自增主键
session_id TEXT 关联会话ID
role TEXT 角色user / assistant
content TEXT 消息内容
metadata TEXT 元数据JSON格式
created_at TIMESTAMP 创建时间

索引

  • idx_messages_session(session_id, created_at)

外键

  • session_id → sessions(session_id) ON DELETE CASCADE

2.3 audit_logs 表 - 审计日志表

字段 类型 说明
id INTEGER 自增主键
user_id TEXT 用户ID
username TEXT 用户名
action TEXT 操作类型chat/rag/search/upload_document等
query TEXT 用户查询内容
result_summary TEXT 结果摘要
sources TEXT 来源文档JSON数组
role TEXT 用户角色
department TEXT 用户部门
ip_address TEXT 客户端IP
duration_ms INTEGER 处理耗时(毫秒)
created_at TIMESTAMP 创建时间

索引

  • idx_audit_user(user_id, created_at)
  • idx_audit_action(action, created_at)
  • idx_audit_created(created_at)

作用:记录所有用户操作,用于安全审计和行为分析。


3. knowledge.db - 知识管理数据库

存储路径data/prod/knowledge.db 环境:生产 + 开发(始终启用) 所属模块knowledge/sync.pyservices/outline.py

3.1 document_hashes 表 - 文档哈希表

字段 类型 说明
document_id TEXT 文档ID相对路径主键
document_name TEXT 文件名
content_hash TEXT 文档内容MD5哈希
file_size INTEGER 文件大小(字节)
last_modified TIMESTAMP 最后修改时间
created_at TIMESTAMP 创建时间
updated_at TIMESTAMP 更新时间

作用:记录每个文档的当前状态,用于检测变更。

3.2 change_logs 表 - 变更日志表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID
document_name TEXT 文件名
change_type TEXT 变更类型added / modified / deleted
old_hash TEXT 变更前哈希
new_hash TEXT 变更后哈希
change_time TIMESTAMP 变更时间
processed INTEGER 是否已处理0/1
error_message TEXT 错误信息
created_at TIMESTAMP 创建时间

索引

  • idx_change_logs_time(change_time)
  • idx_change_logs_processed(processed)

3.3 sync_status 表 - 同步状态表

字段 类型 说明
id INTEGER 自增主键
sync_type TEXT 同步类型incremental/full
status TEXT 状态idle / running / completed / failed
start_time TIMESTAMP 开始时间
end_time TIMESTAMP 结束时间
documents_processed INTEGER 处理文档数
documents_added INTEGER 新增文档数
documents_modified INTEGER 修改文档数
documents_deleted INTEGER 删除文档数
error_message TEXT 错误信息
created_at TIMESTAMP 创建时间

3.4 outline_cache 表 - 纲要缓存表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID唯一
document_name TEXT 文档名称
total_pages INTEGER 总页数
content_hash TEXT 文档内容哈希
outline_json TEXT 纲要结构JSON
generated_at TIMESTAMP 生成时间

索引

  • idx_outline_doc(document_id)

3.5 document_vectors 表 - 文档向量缓存表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID唯一
document_name TEXT 文档名称
vector_hash TEXT 向量哈希
vector_json TEXT 向量数据JSON
tags_json TEXT 标签JSON
updated_at TIMESTAMP 更新时间

索引

  • idx_vector_doc(document_id)

3.6 recommendation_cache 表 - 推荐缓存表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID
recommendations_json TEXT 推荐结果JSON
generated_at TIMESTAMP 生成时间

3.7 document_versions 表 - 文档版本表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID
collection TEXT 所属向量库
version TEXT 版本号,默认 'v1'
content_hash TEXT 内容哈希
status TEXT 状态active / deprecated
effective_date DATE 生效日期
expiry_date DATE 失效日期
deprecated_date DATETIME 废止日期
deprecated_reason TEXT 废止原因
deprecated_by TEXT 废止操作人
change_summary TEXT 变更摘要
changed_sections TEXT 变更章节JSON
supersedes TEXT 取代的版本
chunk_count INTEGER 片段数量
created_at TIMESTAMP 创建时间
created_by TEXT 创建人

唯一约束(document_id, collection, version)

3.8 version_change_logs 表 - 版本变更日志表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID
collection TEXT 所属向量库
old_version TEXT 旧版本
new_version TEXT 新版本
old_status TEXT 旧状态
new_status TEXT 新状态
change_type TEXT 变更类型
reason TEXT 原因
changed_by TEXT 操作人
created_at TIMESTAMP 创建时间

4. exam.db - 出题系统数据库

存储路径data/dev/exam.db 环境:仅开发模式 所属模块exam_pkg/manager.pyexam_pkg/local_db.pyexam_pkg/analysis.py

4.1 questions 表 - 题目表

字段 类型 说明
id TEXT 题目IDUUID主键
question_type TEXT 题型choice / blank / short_answer
content TEXT 题干内容
options TEXT 选择题选项JSON数组
correct_answer TEXT 正确答案
analysis TEXT 解析
knowledge_points TEXT 知识点JSON数组
difficulty INTEGER 难度(1-5)
score INTEGER 分值
source_file TEXT 来源文件路径
source_collection TEXT 来源向量库
source_snippet TEXT 来源知识片段
source_hash TEXT 文件哈希
status TEXT 状态approved
created_at TIMESTAMP 创建时间
created_by TEXT 创建人
updated_at TIMESTAMP 更新时间

索引

  • idx_questions_source(source_file)

4.2 exams 表 - 试卷表

字段 类型 说明
id TEXT 试卷ID主键
name TEXT 试卷名称
description TEXT 描述
total_score INTEGER 总分
total_count INTEGER 题目总数
duration INTEGER 考试时长(分钟)
status TEXT 状态published
created_at TIMESTAMP 创建时间
created_by TEXT 创建人

4.3 exam_questions 表 - 试卷题目关联表

字段 类型 说明
exam_id TEXT 试卷ID
question_id TEXT 题目ID
question_order INTEGER 题目顺序

主键(exam_id, question_id)

外键

  • exam_id → exams(id) ON DELETE CASCADE
  • question_id → questions(id) ON DELETE CASCADE

4.4 student_answers 表 - 学生答卷表

字段 类型 说明
id TEXT 主键
exam_id TEXT 试卷ID
student_id TEXT 学生ID
question_id TEXT 题目ID
question_type TEXT 题型
student_answer TEXT 学生答案
score REAL 得分
max_score INTEGER 满分
feedback TEXT 反馈
score_details TEXT 评分详情JSON
submitted_at TIMESTAMP 提交时间
graded_at TIMESTAMP 批阅时间

索引

  • idx_student_answers_exam(exam_id, student_id)

4.5 grade_reports 表 - 批阅报告表

字段 类型 说明
id TEXT 主键
exam_id TEXT 试卷ID
student_id TEXT 学生ID
total_score REAL 总得分
max_score REAL 满分
score_rate REAL 得分率
analysis TEXT 分析JSON
graded_at TIMESTAMP 批阅时间
字段 类型 说明
id INTEGER 自增主键
question_id TEXT 题目ID
question_type TEXT 题型
exam_id TEXT 试卷ID
document_id TEXT 制度文档ID
document_name TEXT 制度文档名称
chapter TEXT 章节
key_points TEXT 关键知识点JSON
relevance_score REAL 相关度分数
created_at TIMESTAMP 创建时间

索引

  • idx_qdl_question(question_id)
  • idx_qdl_document(document_id)

4.7 knowledge_points 表 - 知识点表

字段 类型 说明
id INTEGER 自增主键
name TEXT 知识点名称,唯一
category TEXT 分类
description TEXT 描述
parent_id INTEGER 父知识点ID
created_at TIMESTAMP 创建时间

外键

  • parent_id → knowledge_points(id)
字段 类型 说明
id INTEGER 自增主键
question_id TEXT 题目ID
question_type TEXT 题型
exam_id TEXT 试卷ID
knowledge_point_id INTEGER 知识点ID
knowledge_point_name TEXT 知识点名称
weight REAL 权重
created_at TIMESTAMP 创建时间

索引

  • idx_qkl_question(question_id)
  • idx_qkl_knowledge(knowledge_point_id)

4.9 question_status 表 - 题目状态表

字段 类型 说明
id INTEGER 自增主键
question_id TEXT 题目ID唯一
question_type TEXT 题型
exam_id TEXT 试卷ID
status TEXT 状态
affected_by TEXT 影响来源
affect_reason TEXT 影响原因
updated_at TIMESTAMP 更新时间

索引

  • idx_qs_status(status)

4.10 exam_analysis_reports 表 - 整卷分析报告表

字段 类型 说明
id INTEGER 自增主键
report_id TEXT 报告ID唯一
exam_id TEXT 试卷ID
exam_name TEXT 试卷名称
student_id TEXT 学生ID
total_score REAL 总得分
max_score REAL 满分
score_rate REAL 得分率
type_scores TEXT 各题型得分JSON
knowledge_analysis TEXT 知识点分析JSON
weak_points TEXT 薄弱知识点JSON
strong_points TEXT 优势知识点JSON
ai_comment TEXT AI评语
study_suggestions TEXT 学习建议JSON
created_at TIMESTAMP 创建时间

4.11 question_suggestions 表 - 新题建议表

字段 类型 说明
id INTEGER 自增主键
document_id TEXT 文档ID
suggestion TEXT 建议内容
status TEXT 状态pending
created_at TIMESTAMP 创建时间

5. ChromaDB 向量数据库

所属模块knowledge/manager.py

5.1 向量库结构

knowledge/vector_store/chroma/
├── chroma.sqlite3          # ChromaDB 主数据库
├── kb_metadata.json        # 向量库元数据
├── public_kb/              # 公开知识库
├── dept_finance/           # 财务部知识库
├── dept_hr/                # 人事部知识库
├── dept_tech/              # 技术部知识库
└── ...                     # 其他部门向量库

5.2 权限矩阵

角色 可访问向量库 可上传 可删除 可同步
admin 全部 全部 全部 全部
manager public_kb + 本部门 本部门 本部门 本部门
user public_kb + 本部门 - - -

5.3 文档元数据结构

每个文档 chunk 的元数据:

字段 类型 说明
source TEXT 文档来源文件名
page INTEGER PDF 页码(可选)
sheet TEXT Excel 工作表(可选)
row INTEGER Excel 行号(可选)
section TEXT 章节(可选)
is_table BOOLEAN 是否为表格
is_excel BOOLEAN 是否为 Excel 数据
security_level TEXT 安全级别
collection TEXT 所属向量库名称

数据库关系图

┌─────────────────────────────────────────────────────────────────┐
│                        多向量库架构                               │
├─────────────────────────────────────────────────────────────────┤
│   knowledge/vector_store/chroma/                                │
│   ├── public_kb/                                                │
│   ├── dept_finance/                                             │
│   ├── dept_hr/                                                  │
│   └── ...                                                       │
│                                                                 │
│   knowledge/manager.py ─────────────────────────────────────┐   │
│   knowledge/router.py                                       │   │
└─────────────────────────────────────────────────────────────┼───┘
                                                              │
                              user_id / document_id 关联      │
                                                              ▼
┌──────────────────┐   ┌──────────────────┐
│  data/prod/      │   │  data/prod/      │
│  feedback.db     │   │  knowledge.db    │
│  (生产+开发)     │   │  (生产+开发)     │
│                  │   │                  │
│  • feedbacks     │   │  • document_     │
│  • faqs          │   │    hashes        │
│  • faq_variants  │   │  • change_logs   │
│  • quality_      │   │  • sync_status   │
│    reports       │   │  • outline_cache │
│  • faq_          │   │  • document_     │
│    suggestions   │   │    versions      │
└──────────────────┘   └──────────────────┘

┌──────────────────┐   ┌──────────────────┐
│  data/dev/       │   │  data/dev/       │
│  session.db      │   │  exam.db         │
│  (仅开发)        │   │  (仅开发)        │
│                  │   │                  │
│  • sessions      │   │  • questions     │
│  • messages      │   │  • exams         │
│  • audit_logs    │   │  • student_      │
│                  │   │    answers       │
│                  │   │  • grade_reports  │
│                  │   │  • knowledge_    │
│                  │   │    points        │
└──────────────────┘   └──────────────────┘

数据库维护

数据清理

# 清理过期会话24小时未活跃- 仅开发环境
sqlite3 data/dev/session.db "DELETE FROM sessions WHERE last_active < datetime('now', '-24 hours');"
sqlite3 data/dev/session.db "DELETE FROM messages WHERE session_id NOT IN (SELECT session_id FROM sessions);"

# 清理旧审计日志保留30天- 仅开发环境
sqlite3 data/dev/session.db "DELETE FROM audit_logs WHERE created_at < datetime('now', '-30 days');"

数据备份

# 备份所有 SQLite 数据库
cp data/prod/*.db backup/
cp data/dev/*.db backup/

# 使用 SQLite 在线备份
sqlite3 data/prod/feedback.db ".backup backup/feedback_backup.db"
sqlite3 data/prod/knowledge.db ".backup backup/knowledge_backup.db"

重置数据库

删除对应的文件,服务启动时会自动重建表结构:

# 重置反馈数据(会丢失反馈和 FAQ
rm data/prod/feedback.db

# 重置知识管理数据(会丢失文档追踪和版本)
rm data/prod/knowledge.db

# 重置会话数据(会丢失会话和对话历史)- 仅开发环境
rm data/dev/session.db

# 重置出题系统数据(会丢失题目和试卷)- 仅开发环境
rm data/dev/exam.db

更新日志

日期 版本 更新内容
2026-06-04 4.0 修正为 4 库分离架构rag_core.db 拆分为 feedback.db + session.db按 prod/dev 子目录分离;新增 faq_variants 表;移除已废弃的 subscriptions/notifications 表
2026-04-13 3.0 数据库架构重构6 个独立数据库合并为 3 个
2026-04-09 2.0 新增多向量库架构文档
2026-04-07 1.0 初始版本