Files
fastapi/docs/02_database.md
T

215 lines
6.6 KiB
Markdown
Raw Normal View History

2026-06-10 11:02:12 +08:00
# 数据库说明
本文档说明医疗问诊 Agent FastAPI 后端依赖的核心数据表、读写边界和交接注意事项。
## 1. 数据库边界
当前服务连接平台 MySQL 数据库 `medical`。用户、机构、科室由 Django 平台维护;FastAPI 只读取用户上下文,不负责注册登录。
FastAPI 主要负责:
- 读取病例、教学题、检查项、评分规则
- 写入训练会话过程中的提交结果
- 完整训练结束后写入训练记录和评分明细
- 生成 PDF 文件路径和导出状态
- 后台预留知识库相关表
## 2. 用户与组织表
### `user`
| 项 | 说明 |
|---|---|
| 来源 | Django 用户中心 |
| FastAPI 用途 | 通过 `/api/user/users/me/` 获取用户身份 |
| 关键字段 | `id``username``real_name``phone``role_type``institution_id``department_id``status` |
| 写入方 | Django |
| FastAPI 是否写入 | 否 |
FastAPI 使用 Django 返回的 `id` 作为业务 `user_id`
### `institution`
| 项 | 说明 |
|---|---|
| 来源 | Django / 平台数据库 |
| FastAPI 用途 | 学习助手知识库按机构隔离 |
| 关键字段 | `id``name` |
| 写入方 | Django 或平台后台 |
| FastAPI 是否写入 | 否 |
### `department`
| 项 | 说明 |
|---|---|
| 来源 | 平台数据库 |
| FastAPI 用途 | 病例科室、评分规则、知识库筛选 |
| 关键字段 | `id``name``category``institution_id` |
| 写入方 | 平台后台 |
| FastAPI 是否写入 | 否 |
## 3. 病例与训练基础表
### `case_base`
| 项 | 说明 |
|---|---|
| 用途 | 病例主表,训练和教学互动共用 |
| 读取模块 | 病例列表、病例详情、训练会话、教学互动 |
| 关键字段 | `id``department_id``title``difficulty``case_type``status` |
| 写入方 | 平台病例解析 / 后台维护 |
| FastAPI 是否写入 | 否 |
### `traditional_case`
| 项 | 说明 |
|---|---|
| 用途 | 练习模式传统病例详情 |
| 读取模块 | 训练会话、Patient Agent、Scoring Agent |
| 关键字段 | `case_id`、主诉、现病史、既往史、查体、辅助检查、诊断、治疗 |
| 写入方 | 平台病例解析 / 后台维护 |
| FastAPI 是否写入 | 否 |
### `teaching_case`
| 项 | 说明 |
|---|---|
| 用途 | 教学互动病例和题目数据 |
| 读取模块 | 教学互动列表、教学互动评价 |
| 关键字段 | `case_id`、题目、选项、答案、解析、视频 |
| 写入方 | 平台病例解析 / 后台维护 |
| FastAPI 是否写入 | 否 |
### `case_exam_item`
| 项 | 说明 |
|---|---|
| 用途 | 当前病例可申请的体格检查和辅助检查项 |
| 读取模块 | 检查列表、检查结果、评价 |
| 关键字段 | `case_id``item_code``item_name``item_type``result_text` |
| 写入方 | 平台病例解析 / 后台维护 |
| FastAPI 是否写入 | 否 |
检查结果必须来自该表,不允许 LLM 编造。
### `scoring_rule`
| 项 | 说明 |
|---|---|
| 用途 | AI 评价基础评分规则 |
| 读取模块 | Scoring Agent、教学互动评价 |
| 关键字段 | `case_id``department_id`、评分维度、分值、规则内容 |
| 写入方 | 平台后台 |
| FastAPI 是否写入 | 否 |
## 4. 训练记录表
### `training_sessions`
| 项 | 说明 |
|---|---|
| 用途 | 训练过程会话状态 |
| 写入模块 | 新建会话、阶段流转 |
| 关键字段 | `id``session_uid``user_id``case_id``mode``status``patient_config` |
| 访问隔离 | 必须按 `user_id` 查询 |
### `session_orders`
| 项 | 说明 |
|---|---|
| 用途 | 记录当前会话已申请检查 |
| 写入模块 | 体格检查 / 辅助检查结果接口 |
| 关键字段 | `session_id``item_code``result_text``already_ordered` |
| 重要规则 | 同一会话同一 `item_code` 幂等,不重复写入 |
### `session_submissions`
| 项 | 说明 |
|---|---|
| 用途 | 保存诊断和治疗提交内容 |
| 写入模块 | 提交诊断、提交治疗 |
| 关键字段 | `session_id``submission_type``content` |
### `session_runtime_messages`
| 项 | 说明 |
|---|---|
| 用途 | 调试或短期会话消息辅助表 |
| 规则 | 长期历史不以完整聊天记录为主,正式上下文优先走 Redis 短期 memory |
### `training_record`
| 项 | 说明 |
|---|---|
| 用途 | 完整训练结束后的长期记录 |
| 写入模块 | 生成评价、教学互动评价 |
| 关键字段 | `id``user_id``case_id``score_type``total_score``report_summary``pdf_path` |
| 重要规则 | 中断、退出、未完成流程不写入 |
### `training_score_detail`
| 项 | 说明 |
|---|---|
| 用途 | 评分明细表 |
| 写入模块 | 训练评价、教学互动评价 |
| 关键字段 | `record_id``rule_id``dimension``score``deducted_reason``evidence_message_ids``ai_confidence``comment` |
## 5. 知识库预留表
### `kb_knowledge_space`
| 项 | 说明 |
|---|---|
| 用途 | 机构知识空间和 Milvus collection 映射 |
| 关键字段 | `institution_id``collection_name``embedding_model``embedding_dim``status` |
### `kb_knowledge_document`
| 项 | 说明 |
|---|---|
| 用途 | 内容管理员上传 PDF 的元数据 |
| 关键字段 | `institution_id``uploaded_by``file_name``file_sha256``status``parse_status``embedding_status``chunk_count` |
### `kb_knowledge_chunk`
| 项 | 说明 |
|---|---|
| 用途 | PDF 分片文本和页码来源 |
| 关键字段 | `document_id``institution_id``chunk_uid``page_start``page_end``chunk_text` |
### `kb_knowledge_ingestion_task`
| 项 | 说明 |
|---|---|
| 用途 | PDF 入库任务进度 |
| 关键字段 | `document_id``institution_id``status``progress``current_step``error_message` |
### `kb_knowledge_query_log`
| 项 | 说明 |
|---|---|
| 用途 | AI 学习助手 RAG 查询日志 |
| 关键字段 | `user_id``institution_id``question``retrieval_hit``retrieved_chunk_ids``answer_summary`、耗时字段 |
当前阶段 AI 学习助手不强依赖知识库存在;没有知识库时仍会调用 LLM 流式回答。
## 6. Redis 数据
Redis 用于短期会话 memory
- 会话创建时初始化
- 问诊、检查结果、诊断治疗提交时写入
- 评价生成后释放
- TTL 到期后自动过期
Redis 不作为长期训练历史存储。
## 7. 数据库交接注意事项
- FastAPI 不维护用户注册登录。
- FastAPI 不直接修改病例基础数据。
- 训练记录按 `user_id` 隔离。
- 检查结果只从 `case_exam_item` 返回。
- 评价生成后才写长期训练记录。
- 知识库表是生产扩展点,真实大规模入库前需要压测。