815 lines
17 KiB
Markdown
815 lines
17 KiB
Markdown
|
|
---
|
|||
|
|
source: AI回答.md
|
|||
|
|
updated: 2026-05-09
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 知习 MySQL 数据库表结构设计
|
|||
|
|
|
|||
|
|
> 共 27 张表,v0.1 先建 24 张核心表。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 通用字段规范
|
|||
|
|
|
|||
|
|
每张核心表统一使用:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|||
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- `id`:内部主键
|
|||
|
|
- `created_at`:创建时间
|
|||
|
|
- `updated_at`:更新时间
|
|||
|
|
- `deleted_at`:软删除
|
|||
|
|
|
|||
|
|
状态字段统一用 `VARCHAR(32)`,不用 MySQL ENUM。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、用户与认证表(5 张)
|
|||
|
|
|
|||
|
|
### 1. users 用户表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
users
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- email VARCHAR(255) NULL
|
|||
|
|
- nickname VARCHAR(100) NULL
|
|||
|
|
- avatar_url VARCHAR(500) NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
- onboarding_completed TINYINT(1) NOT NULL DEFAULT 0
|
|||
|
|
- last_login_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
- deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_users_email (email)
|
|||
|
|
INDEX idx_users_status (status)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. auth_accounts 第三方登录账号表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
auth_accounts
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- provider VARCHAR(32) NOT NULL -- apple
|
|||
|
|
- provider_user_id VARCHAR(255) NOT NULL -- Apple userIdentifier / sub
|
|||
|
|
- email VARCHAR(255) NULL
|
|||
|
|
- raw_profile_json JSON NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_provider_user (provider, provider_user_id)
|
|||
|
|
INDEX idx_auth_accounts_user_id (user_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. refresh_tokens 刷新 Token 表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
refresh_tokens
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- token_hash VARCHAR(255) NOT NULL
|
|||
|
|
- device_id VARCHAR(255) NULL
|
|||
|
|
- device_name VARCHAR(255) NULL
|
|||
|
|
- expires_at DATETIME NOT NULL
|
|||
|
|
- revoked_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_refresh_tokens_user_id (user_id)
|
|||
|
|
INDEX idx_refresh_tokens_token_hash (token_hash)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. user_profiles 用户资料扩展表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
user_profiles
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- learning_identity VARCHAR(100) NULL -- 系统学习者 / 备考用户 / 知识工作者
|
|||
|
|
- learning_direction VARCHAR(255) NULL -- 认知科学 / AIGC / 产品设计
|
|||
|
|
- bio TEXT NULL
|
|||
|
|
- current_goal VARCHAR(255) NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_user_profiles_user_id (user_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. user_preferences 用户学习偏好表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
user_preferences
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- preferred_methods JSON NULL
|
|||
|
|
-- ["active_recall", "spaced_repetition", "feynman", "retrieval_practice"]
|
|||
|
|
- default_focus_minutes INT NOT NULL DEFAULT 25
|
|||
|
|
- ai_suggestion_level VARCHAR(32) NOT NULL DEFAULT 'normal'
|
|||
|
|
-- low / normal / high
|
|||
|
|
- language VARCHAR(32) NOT NULL DEFAULT 'zh-CN'
|
|||
|
|
- appearance VARCHAR(32) NOT NULL DEFAULT 'system'
|
|||
|
|
- notification_enabled TINYINT(1) NOT NULL DEFAULT 1
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_user_preferences_user_id (user_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、知识库相关表(5 张)
|
|||
|
|
|
|||
|
|
### 6. knowledge_bases 知识库表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
knowledge_bases
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- description TEXT NULL
|
|||
|
|
- cover_key VARCHAR(100) NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
-- active / archived / deleted
|
|||
|
|
- item_count INT NOT NULL DEFAULT 0
|
|||
|
|
- last_studied_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
- deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_knowledge_bases_user_id (user_id)
|
|||
|
|
INDEX idx_knowledge_bases_status (status)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 7. knowledge_items 知识点/内容表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
knowledge_items
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_base_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- parent_id BIGINT UNSIGNED NULL
|
|||
|
|
- item_type VARCHAR(32) NOT NULL
|
|||
|
|
-- chapter / lesson / concept / note / imported_doc
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- content LONGTEXT NULL
|
|||
|
|
- summary TEXT NULL
|
|||
|
|
- source_type VARCHAR(32) NULL
|
|||
|
|
-- manual / file / url / ai_generated
|
|||
|
|
- source_ref VARCHAR(500) NULL
|
|||
|
|
- order_index INT NOT NULL DEFAULT 0
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
- deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_knowledge_items_user_id (user_id)
|
|||
|
|
INDEX idx_knowledge_items_kb_id (knowledge_base_id)
|
|||
|
|
INDEX idx_knowledge_items_parent_id (parent_id)
|
|||
|
|
INDEX idx_knowledge_items_type (item_type)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8. knowledge_item_relations 知识点关联表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
knowledge_item_relations
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- source_item_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- target_item_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- relation_type VARCHAR(32) NOT NULL
|
|||
|
|
-- related / prerequisite / similar / conflict / extension
|
|||
|
|
- confidence DECIMAL(5,2) NULL
|
|||
|
|
- reason TEXT NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_relations_source (source_item_id)
|
|||
|
|
INDEX idx_relations_target (target_item_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 9. tags 标签表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
tags
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- name VARCHAR(100) NOT NULL
|
|||
|
|
- color VARCHAR(32) NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_user_tag_name (user_id, name)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 10. knowledge_item_tags 知识点标签关联表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
knowledge_item_tags
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- knowledge_item_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- tag_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_item_tag (knowledge_item_id, tag_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、资料导入相关表(2 张)
|
|||
|
|
|
|||
|
|
### 11. uploaded_files 上传文件表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
uploaded_files
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- filename VARCHAR(255) NOT NULL
|
|||
|
|
- mime_type VARCHAR(100) NULL
|
|||
|
|
- storage_path VARCHAR(500) NOT NULL
|
|||
|
|
- size_bytes BIGINT UNSIGNED NOT NULL DEFAULT 0
|
|||
|
|
- checksum VARCHAR(255) NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_uploaded_files_user_id (user_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 12. document_imports 资料导入任务表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
document_imports
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_base_id BIGINT UNSIGNED NULL
|
|||
|
|
- file_id BIGINT UNSIGNED NULL
|
|||
|
|
- source_type VARCHAR(32) NOT NULL
|
|||
|
|
-- file / text / url
|
|||
|
|
- source_name VARCHAR(255) NULL
|
|||
|
|
- source_url VARCHAR(500) NULL
|
|||
|
|
- raw_text LONGTEXT NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'pending'
|
|||
|
|
-- pending / processing / success / failed
|
|||
|
|
- progress INT NOT NULL DEFAULT 0
|
|||
|
|
- error_message TEXT NULL
|
|||
|
|
- result_json JSON NULL
|
|||
|
|
- started_at DATETIME NULL
|
|||
|
|
- completed_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_document_imports_user_id (user_id)
|
|||
|
|
INDEX idx_document_imports_status (status)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、学习过程相关表(2 张)
|
|||
|
|
|
|||
|
|
### 13. learning_sessions 学习会话表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
learning_sessions
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_base_id BIGINT UNSIGNED NULL
|
|||
|
|
- knowledge_item_id BIGINT UNSIGNED NULL
|
|||
|
|
- mode VARCHAR(32) NOT NULL
|
|||
|
|
-- reading / active_recall / review / feynman / free_learning
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
-- active / completed / cancelled
|
|||
|
|
- started_at DATETIME NOT NULL
|
|||
|
|
- ended_at DATETIME NULL
|
|||
|
|
- duration_seconds INT NOT NULL DEFAULT 0
|
|||
|
|
- focus_minutes INT NULL
|
|||
|
|
- metadata JSON NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_learning_sessions_user_id (user_id)
|
|||
|
|
INDEX idx_learning_sessions_item_id (knowledge_item_id)
|
|||
|
|
INDEX idx_learning_sessions_started_at (started_at)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 14. learning_records 学习记录表
|
|||
|
|
|
|||
|
|
类似 GitHub commit log,语义是学习记录。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
learning_records
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- session_id BIGINT UNSIGNED NULL
|
|||
|
|
- record_type VARCHAR(32) NOT NULL
|
|||
|
|
-- read / active_recall / review / ai_analysis / focus_item_completed
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- description TEXT NULL
|
|||
|
|
- duration_seconds INT NOT NULL DEFAULT 0
|
|||
|
|
- occurred_at DATETIME NOT NULL
|
|||
|
|
- metadata JSON NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_learning_records_user_id (user_id)
|
|||
|
|
INDEX idx_learning_records_occurred_at (occurred_at)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、主动回忆相关表(2 张)
|
|||
|
|
|
|||
|
|
### 15. active_recall_questions 主动回忆问题表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
active_recall_questions
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_item_id BIGINT UNSIGNED NULL
|
|||
|
|
- question_text TEXT NOT NULL
|
|||
|
|
- difficulty VARCHAR(32) NULL
|
|||
|
|
-- easy / normal / hard
|
|||
|
|
- created_by VARCHAR(32) NOT NULL DEFAULT 'ai'
|
|||
|
|
-- ai / user / system
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_recall_questions_user_id (user_id)
|
|||
|
|
INDEX idx_recall_questions_item_id (knowledge_item_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 16. active_recall_answers 主动回忆回答表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
active_recall_answers
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- question_id BIGINT UNSIGNED NULL
|
|||
|
|
- session_id BIGINT UNSIGNED NULL
|
|||
|
|
- answer_type VARCHAR(32) NOT NULL DEFAULT 'text'
|
|||
|
|
-- text / voice
|
|||
|
|
- answer_text LONGTEXT NULL
|
|||
|
|
- audio_file_id BIGINT UNSIGNED NULL
|
|||
|
|
- submitted_at DATETIME NOT NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_recall_answers_user_id (user_id)
|
|||
|
|
INDEX idx_recall_answers_question_id (question_id)
|
|||
|
|
INDEX idx_recall_answers_session_id (session_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、AI 分析相关表(2 张)
|
|||
|
|
|
|||
|
|
### 17. ai_analysis_jobs AI 分析任务表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
ai_analysis_jobs
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- session_id BIGINT UNSIGNED NULL
|
|||
|
|
- answer_id BIGINT UNSIGNED NULL
|
|||
|
|
- job_type VARCHAR(32) NOT NULL
|
|||
|
|
-- active_recall_analysis / weak_point_detection / review_generation
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'pending'
|
|||
|
|
-- pending / processing / success / failed
|
|||
|
|
- progress INT NOT NULL DEFAULT 0
|
|||
|
|
- error_message TEXT NULL
|
|||
|
|
- queued_at DATETIME NULL
|
|||
|
|
- started_at DATETIME NULL
|
|||
|
|
- completed_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_ai_jobs_user_id (user_id)
|
|||
|
|
INDEX idx_ai_jobs_status (status)
|
|||
|
|
INDEX idx_ai_jobs_session_id (session_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 18. ai_analysis_results AI 分析结果表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
ai_analysis_results
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- job_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- session_id BIGINT UNSIGNED NULL
|
|||
|
|
- answer_id BIGINT UNSIGNED NULL
|
|||
|
|
- summary TEXT NULL
|
|||
|
|
- mastery_score INT NULL -- 0-100
|
|||
|
|
- strengths JSON NULL
|
|||
|
|
- weaknesses JSON NULL
|
|||
|
|
- suggestions JSON NULL
|
|||
|
|
- next_actions JSON NULL
|
|||
|
|
- raw_result JSON NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_ai_results_user_id (user_id)
|
|||
|
|
INDEX idx_ai_results_job_id (job_id)
|
|||
|
|
INDEX idx_ai_results_session_id (session_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、待巩固项表(1 张)
|
|||
|
|
|
|||
|
|
### 19. focus_items 待巩固项表
|
|||
|
|
|
|||
|
|
类似 GitHub issue,学习语义叫「待巩固项」。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
focus_items
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_base_id BIGINT UNSIGNED NULL
|
|||
|
|
- knowledge_item_id BIGINT UNSIGNED NULL
|
|||
|
|
- analysis_result_id BIGINT UNSIGNED NULL
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- reason TEXT NULL
|
|||
|
|
- suggestion TEXT NULL
|
|||
|
|
- priority VARCHAR(32) NOT NULL DEFAULT 'normal'
|
|||
|
|
-- low / normal / high
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'open'
|
|||
|
|
-- open / in_review / completed / ignored
|
|||
|
|
- mastery_score INT NULL
|
|||
|
|
- due_at DATETIME NULL
|
|||
|
|
- completed_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
- deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_focus_items_user_id (user_id)
|
|||
|
|
INDEX idx_focus_items_status (status)
|
|||
|
|
INDEX idx_focus_items_due_at (due_at)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、复习相关表(3 张)
|
|||
|
|
|
|||
|
|
### 20. review_cards 复习卡片表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
review_cards
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- knowledge_item_id BIGINT UNSIGNED NULL
|
|||
|
|
- focus_item_id BIGINT UNSIGNED NULL
|
|||
|
|
- front_text TEXT NOT NULL
|
|||
|
|
- back_text TEXT NULL
|
|||
|
|
- difficulty VARCHAR(32) NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
-- active / suspended / completed
|
|||
|
|
- next_review_at DATETIME NULL
|
|||
|
|
- interval_days INT NOT NULL DEFAULT 1
|
|||
|
|
- ease_factor DECIMAL(4,2) NOT NULL DEFAULT 2.50
|
|||
|
|
- repetition_count INT NOT NULL DEFAULT 0
|
|||
|
|
- lapse_count INT NOT NULL DEFAULT 0
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
- deleted_at DATETIME NULL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_review_cards_user_id (user_id)
|
|||
|
|
INDEX idx_review_cards_next_review_at (next_review_at)
|
|||
|
|
INDEX idx_review_cards_focus_item_id (focus_item_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 21. review_logs 复习记录表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
review_logs
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- review_card_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- session_id BIGINT UNSIGNED NULL
|
|||
|
|
- rating VARCHAR(32) NOT NULL
|
|||
|
|
-- again / hard / good / easy
|
|||
|
|
- response_text TEXT NULL
|
|||
|
|
- reviewed_at DATETIME NOT NULL
|
|||
|
|
- next_review_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_review_logs_user_id (user_id)
|
|||
|
|
INDEX idx_review_logs_card_id (review_card_id)
|
|||
|
|
INDEX idx_review_logs_reviewed_at (reviewed_at)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 22. review_plans 复习计划表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
review_plans
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'active'
|
|||
|
|
-- active / completed / cancelled
|
|||
|
|
- scheduled_at DATETIME NULL
|
|||
|
|
- completed_at DATETIME NULL
|
|||
|
|
- card_count INT NOT NULL DEFAULT 0
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_review_plans_user_id (user_id)
|
|||
|
|
INDEX idx_review_plans_scheduled_at (scheduled_at)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 九、学习活跃记录表(1 张)
|
|||
|
|
|
|||
|
|
### 23. daily_learning_activities 每日学习活跃表
|
|||
|
|
|
|||
|
|
用于个人中心的蓝色学习活跃图。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
daily_learning_activities
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- activity_date DATE NOT NULL
|
|||
|
|
- duration_seconds INT NOT NULL DEFAULT 0
|
|||
|
|
- sessions_count INT NOT NULL DEFAULT 0
|
|||
|
|
- active_recall_count INT NOT NULL DEFAULT 0
|
|||
|
|
- review_count INT NOT NULL DEFAULT 0
|
|||
|
|
- ai_analysis_count INT NOT NULL DEFAULT 0
|
|||
|
|
- completed_loop_count INT NOT NULL DEFAULT 0
|
|||
|
|
- activity_level INT NOT NULL DEFAULT 0 -- 0-4,颜色深浅
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
UNIQUE KEY uk_user_activity_date (user_id, activity_date)
|
|||
|
|
INDEX idx_daily_activity_user_id (user_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十、通知与反馈表(2 张)
|
|||
|
|
|
|||
|
|
### 24. notifications 消息通知表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
notifications
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- type VARCHAR(32) NOT NULL
|
|||
|
|
-- review_due / ai_analysis_done / learning_suggestion / system
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- content TEXT NULL
|
|||
|
|
- data JSON NULL
|
|||
|
|
- read_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_notifications_user_id (user_id)
|
|||
|
|
INDEX idx_notifications_read_at (read_at)
|
|||
|
|
INDEX idx_notifications_type (type)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 25. feedbacks 用户反馈表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
feedbacks
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NULL
|
|||
|
|
- email VARCHAR(255) NULL
|
|||
|
|
- category VARCHAR(64) NOT NULL
|
|||
|
|
-- feature / bug / experience / privacy / other
|
|||
|
|
- content TEXT NOT NULL
|
|||
|
|
- device_info JSON NULL
|
|||
|
|
- status VARCHAR(32) NOT NULL DEFAULT 'open'
|
|||
|
|
-- open / processing / resolved / ignored
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_feedbacks_user_id (user_id)
|
|||
|
|
INDEX idx_feedbacks_status (status)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十一、合规与系统表(2 张)
|
|||
|
|
|
|||
|
|
### 26. user_consents 用户协议同意记录表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
user_consents
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- user_id BIGINT UNSIGNED NOT NULL
|
|||
|
|
- consent_type VARCHAR(32) NOT NULL
|
|||
|
|
-- privacy_policy / terms_of_service
|
|||
|
|
- version VARCHAR(50) NOT NULL
|
|||
|
|
- accepted_at DATETIME NOT NULL
|
|||
|
|
- ip_address VARCHAR(100) NULL
|
|||
|
|
- user_agent VARCHAR(500) NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
索引:
|
|||
|
|
```sql
|
|||
|
|
INDEX idx_user_consents_user_id (user_id)
|
|||
|
|
INDEX idx_user_consents_type (consent_type)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 27. app_changelogs 更新记录表(可选)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
app_changelogs
|
|||
|
|
- id BIGINT UNSIGNED PK
|
|||
|
|
- version VARCHAR(50) NOT NULL
|
|||
|
|
- title VARCHAR(255) NOT NULL
|
|||
|
|
- content TEXT NOT NULL
|
|||
|
|
- platform VARCHAR(32) NOT NULL DEFAULT 'ios'
|
|||
|
|
- published_at DATETIME NULL
|
|||
|
|
- created_at DATETIME
|
|||
|
|
- updated_at DATETIME
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## v0.1 建表优先级
|
|||
|
|
|
|||
|
|
### 第一批(24 张,必须)
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
users
|
|||
|
|
auth_accounts
|
|||
|
|
refresh_tokens
|
|||
|
|
user_profiles
|
|||
|
|
user_preferences
|
|||
|
|
|
|||
|
|
knowledge_bases
|
|||
|
|
knowledge_items
|
|||
|
|
tags
|
|||
|
|
knowledge_item_tags
|
|||
|
|
document_imports
|
|||
|
|
uploaded_files
|
|||
|
|
|
|||
|
|
learning_sessions
|
|||
|
|
learning_records
|
|||
|
|
active_recall_questions
|
|||
|
|
active_recall_answers
|
|||
|
|
|
|||
|
|
ai_analysis_jobs
|
|||
|
|
ai_analysis_results
|
|||
|
|
focus_items
|
|||
|
|
|
|||
|
|
review_cards
|
|||
|
|
review_logs
|
|||
|
|
|
|||
|
|
daily_learning_activities
|
|||
|
|
|
|||
|
|
notifications
|
|||
|
|
feedbacks
|
|||
|
|
user_consents
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 第二批(3 张,可稍后)
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
knowledge_item_relations
|
|||
|
|
review_plans
|
|||
|
|
app_changelogs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 模块与表对应关系
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
auth → users, auth_accounts, refresh_tokens
|
|||
|
|
users → user_profiles, user_preferences, user_consents
|
|||
|
|
knowledge-base → knowledge_bases
|
|||
|
|
knowledge-items → knowledge_items, knowledge_item_relations, tags, knowledge_item_tags
|
|||
|
|
document-import → uploaded_files, document_imports
|
|||
|
|
learning-session → learning_sessions, learning_records
|
|||
|
|
active-recall → active_recall_questions, active_recall_answers
|
|||
|
|
ai-analysis → ai_analysis_jobs, ai_analysis_results
|
|||
|
|
focus-items → focus_items
|
|||
|
|
review → review_cards, review_logs, review_plans
|
|||
|
|
learning-activity → daily_learning_activities
|
|||
|
|
notifications → notifications
|
|||
|
|
feedback → feedbacks
|
|||
|
|
system → app_changelogs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Prisma 生成规范
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
所有表使用 BIGINT UNSIGNED AUTO_INCREMENT 主键
|
|||
|
|
状态字段使用 VARCHAR,不使用 ENUM
|
|||
|
|
JSON 字段用于存储 AI 分析结构化结果、用户偏好、元数据
|
|||
|
|
核心表添加 created_at、updated_at、deleted_at
|
|||
|
|
为 user_id、status、created_at、外键字段添加合理索引
|
|||
|
|
```
|