数据库表文档.md 16 KB

数据库表文档

本文档记录了AI学习搭子系统中的数据库表结构和字段说明。

数据库配置

  • 数据库类型: H2 Database (开发环境)
  • 连接URL: jdbc:h2:file:./data/testdb
  • 用户名: sa
  • 密码: 无
  • H2控制台: http://localhost:8080/api/h2-console

1. 用户信息表 (user_info)

表说明

存储中小学学习搭子系统的用户基本信息,包括用户名、密码、年级、头像等。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 唯一 说明
user_id BIGINT - NOT NULL AUTO_INCREMENT - 用户ID,主键,自增
username VARCHAR 50 NOT NULL - - 用户名,唯一,2-50个字符
password VARCHAR 255 NOT NULL - - - 用户密码,至少6个字符
avatar_url VARCHAR 255 NULL - - - 用户头像URL
grade VARCHAR 20 NULL - - - 年级信息
create_time TIMESTAMP - NOT NULL - - - 创建时间,自动设置
update_time TIMESTAMP - NULL - - - 更新时间,自动更新

字段详细说明

  • user_id: 用户唯一标识符,系统自动生成
  • username: 用户登录名,必须唯一,长度限制2-50个字符
  • password: 用户登录密码,最少6个字符(生产环境建议使用BCrypt加密)
  • avatar_url: 用户头像文件的URL路径,支持jpg、jpeg、png格式,最大5MB
  • grade: 用户所在年级,如"小学一年级"、"初中二年级"、"高中三年级"等
  • create_time: 记录创建时间,插入时自动设置
  • update_time: 记录最后更新时间,更新时自动设置

约束条件

  • 用户名必须唯一
  • 用户名和密码不能为空
  • 创建时间不可更新
  • 支持头像文件上传,文件保存在 uploads/avatars/ 目录

2. 学习目标表 (goals)

表说明

存储用户的学习目标信息,包括目标内容、学科、难度、进度等。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 说明
goal_id BIGINT - NOT NULL AUTO_INCREMENT 目标ID,主键,自增
user_id BIGINT - NOT NULL - - 用户ID,外键关联user_info表
subject VARCHAR 50 NOT NULL - - 学科名称
goal_type VARCHAR 50 NOT NULL - - 目标类型
goal_content TEXT - NULL - - 目标内容描述
difficulty VARCHAR 20 NULL - - 难度等级
total_quantity INT - NULL 0 - 目标总数量
completed_quantity INT - NULL 0 - 已完成数量
estimated_time INT - NULL - - 预估完成时间(分钟)
start_time TIMESTAMP - NULL - - 开始执行时间
status TINYINT - NULL 0 - 目标状态
create_time TIMESTAMP - NULL CURRENT_TIMESTAMP - 创建时间
complete_time TIMESTAMP - NULL - - 完成时间
answer_duration INT - NULL 0 - 答题时长(秒)

字段详细说明

  • goal_id: 学习目标唯一标识符,系统自动生成
  • user_id: 关联的用户ID,外键引用user_info表的user_id
  • subject: 学科名称,如"数学"、"语文"、"英语"、"物理"、"化学"等
  • goal_type: 目标类型,枚举值:
    • DAILY: 每日目标
    • WEEKLY: 每周目标
    • MONTHLY: 每月目标
  • goal_content: 目标的具体内容描述,如"完成代数练习题"、"背诵古诗词"等
  • difficulty: 难度等级,枚举值:
    • EASY: 简单
    • MEDIUM: 中等
    • HARD: 困难
  • total_quantity: 目标的总数量,如练习题数量、单词数量等
  • completed_quantity: 已完成的数量,用于计算完成进度
  • estimated_time: 预估完成时间,单位为分钟
  • start_time: 目标开始执行的时间
  • status: 目标状态,数值枚举:
    • 0: PENDING(待执行)
    • 1: IN_PROGRESS(进行中)
    • 2: COMPLETED(已完成)
    • 3: CANCELLED(已取消)
  • create_time: 目标创建时间,默认为当前时间
  • complete_time: 目标完成时间,当目标状态变为已完成时自动设置
  • answer_duration: 答题时长,记录用户在答题页面的总停留时间,单位为秒,每次提交答案时累加

业务规则

  1. 目标状态流转:

    • 新创建的目标默认状态为PENDING(0)
    • 调用开始接口后状态变为IN_PROGRESS(1)
    • 完成后状态变为COMPLETED(2)
    • 可以取消变为CANCELLED(3)
  2. 进度计算:

    • 完成率 = completed_quantity / total_quantity * 100%
    • 当completed_quantity >= total_quantity时,自动标记为已完成
  3. 时间管理:

    • create_time记录目标创建时间
    • start_time记录实际开始执行时间
    • 可根据estimated_time进行时间规划

3. 目标详情表 (goal_of_detail)

表说明

存储AI生成的题目详情信息,与学习目标表关联,支持选择题、填空题、单词题等多种题型。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 说明
detail_id BIGINT - NOT NULL AUTO_INCREMENT 题目ID,主键,自增
goal_id BIGINT - NOT NULL - - 目标ID,外键关联goals表
subject VARCHAR 50 NOT NULL - - 学科名称
content_type INT - NOT NULL - - 题目类型:1-选择题,2-填空题,3-单词
content TEXT - NOT NULL - - 题目内容
options TEXT - NULL - - 选择题选项,JSON格式存储
answer TEXT - NOT NULL - - 题目答案
difficulty VARCHAR 20 NULL - - 难度等级
knowledge_point VARCHAR 100 NULL - - 知识点
create_time TIMESTAMP - NOT NULL CURRENT_TIMESTAMP - 创建时间

字段详细说明

  • detail_id: 题目唯一标识符,系统自动生成
  • goal_id: 关联的学习目标ID,外键引用goals表的goal_id
  • subject: 学科名称,与目标表的subject字段对应
  • content_type: 题目类型,数值枚举:
    • 1: 选择题(包含多个选项)
    • 2: 填空题(需要填写答案)
    • 3: 单词题(英语单词练习)
  • content: 题目的具体内容,如"计算:3 + 5 = ?"
  • options: 选择题的选项,JSON数组格式存储,如["A. 6", "B. 7", "C. 8", "D. 9"]
  • answer: 题目的正确答案
  • difficulty: 难度等级,与目标表的difficulty字段对应:
    • 简单: 基础题目
    • 中等: 中等难度题目
    • 困难: 高难度题目
  • knowledge_point: 题目涉及的知识点,如"加减法"、"代数"等
  • create_time: 题目创建时间,AI生成时自动设置

业务规则

  1. 题目生成规则:

    • 每个目标可以包含多个题目
    • 题目数量由目标的total_quantity字段决定
    • AI根据目标的学科、难度等信息生成相应题目
  2. 题目类型说明:

    • 选择题:包含题目内容和多个选项,options字段存储选项数组
    • 填空题:只包含题目内容和答案,options字段为空
    • 单词题:英语单词练习,可能包含释义、例句等
  3. 数据关联:

    • 与goals表通过goal_id建立外键关联
    • 删除目标时,相关题目也会被级联删除

3. 用户答题记录表 (user_answer)

表说明

存储用户在学习过程中的答题记录,包括用户答案、正确性、用时等信息,用于学习进度跟踪和统计分析。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 说明
answer_id BIGINT - NOT NULL AUTO_INCREMENT 记录ID,主键,自增
user_id BIGINT - NOT NULL - - 用户ID,外键关联user_info表
goal_id BIGINT - NOT NULL - - 目标ID,外键关联goals表
content_id BIGINT - NOT NULL - - 题目ID,外键关联goal_of_detail表
user_answer TEXT - NULL - - 用户提交的答案
is_correct TINYINT - NULL - - 是否正确(0-错误,1-正确)
spend_time INT - NULL - - 单题用时(秒)
answer_time TIMESTAMP - NULL CURRENT_TIMESTAMP - 答题时间,自动设置

字段详细说明

  • answer_id: 答题记录唯一标识符,系统自动生成
  • user_id: 关联的用户ID,外键引用user_info表的user_id
  • goal_id: 关联的学习目标ID,外键引用goals表的goal_id
  • content_id: 关联的题目ID,外键引用goal_of_detail表的detail_id
  • user_answer: 用户提交的答案内容,支持文本格式
  • is_correct: 答案正确性标识:
    • 0: 错误
    • 1: 正确
    • NULL: 未评判
  • spend_time: 用户答题用时,单位为秒,用于分析答题效率
  • answer_time: 答题提交时间,默认为当前时间戳

业务规则

  1. 答题记录创建:

    • 用户提交答案时自动创建记录
    • 系统自动判断答案正确性并设置is_correct字段
    • 记录答题用时用于后续分析
  2. 数据统计:

    • 支持按用户、目标、时间范围等维度统计答题情况
    • 计算正确率、平均用时等学习指标
    • 生成学习报告和进度分析
  3. 数据关联:

    • 与用户表、目标表、题目表建立外键关联
    • 支持级联查询获取完整的答题上下文信息

表关系

外键关系

  • goals.user_iduser_info.user_id (多对一关系)

    • 一个用户可以有多个学习目标
    • 每个学习目标只属于一个用户
  • goal_of_detail.goal_idgoals.goal_id (多对一关系)

    • 一个学习目标可以包含多个题目
    • 每个题目只属于一个学习目标
    • 支持级联删除:删除目标时自动删除相关题目
  • user_answer.user_iduser_info.user_id (多对一关系)

    • 一个用户可以有多个答题记录
    • 每个答题记录只属于一个用户
  • user_answer.goal_idgoals.goal_id (多对一关系)

    • 一个目标可以有多个答题记录
    • 每个答题记录只属于一个目标
  • user_answer.content_idgoal_of_detail.detail_id (多对一关系)

    • 一个题目可以有多个答题记录(不同用户或多次作答)
    • 每个答题记录只对应一个题目

索引建议

为了提高查询性能,建议创建以下索引:

-- 用户表索引
CREATE INDEX idx_user_username ON user_info(username);
CREATE INDEX idx_user_create_time ON user_info(create_time);

-- 目标表索引
CREATE INDEX idx_goal_user_id ON goals(user_id);
CREATE INDEX idx_goal_status ON goals(status);
CREATE INDEX idx_goal_subject ON goals(subject);
CREATE INDEX idx_goal_create_time ON goals(create_time);
CREATE INDEX idx_goal_user_status ON goals(user_id, status);

-- 目标详情表索引
CREATE INDEX idx_detail_goal_id ON goal_of_detail(goal_id);
CREATE INDEX idx_detail_subject ON goal_of_detail(subject);
CREATE INDEX idx_detail_content_type ON goal_of_detail(content_type);
CREATE INDEX idx_detail_difficulty ON goal_of_detail(difficulty);
CREATE INDEX idx_detail_create_time ON goal_of_detail(create_time);
CREATE INDEX idx_detail_goal_type ON goal_of_detail(goal_id, content_type);}}}

数据初始化

系统启动时会自动初始化测试数据,包括:

默认用户

  • 用户1: username="student1", grade="初中一年级"
  • 用户2: username="student2", grade="高中二年级"
  • 用户3: username="teacher1", grade="教师"
  • 用户4: username="parent1", grade="家长"

示例目标

系统会为测试用户创建一些示例学习目标,涵盖不同学科和难度等级。


维护说明

  1. 数据备份: H2数据库文件位于 data/testdb.mv.db,定期备份此文件
  2. 日志监控: 所有数据库操作都有详细日志记录
  3. 性能优化: 根据查询模式适当添加索引
  4. 数据清理: 定期清理过期的已完成目标数据

4. 学习报告表 (study_report)

表说明

存储用户学习报告信息,包括学习统计数据、知识点分析、难度分析等,用于生成详细的学习报告。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 说明
report_id BIGINT - NOT NULL AUTO_INCREMENT 报告ID,主键,自增
goal_id BIGINT - NOT NULL - - 目标ID,外键关联goals表
user_id BIGINT - NOT NULL - - 用户ID,外键关联user_info表
generate_time TIMESTAMP - NOT NULL CURRENT_TIMESTAMP - 报告生成时间
accuracy DECIMAL 5,2 NULL - - 正确率(百分比)
knowledge_analysis TEXT - NULL - - 知识点分析,JSON格式存储
difficulty_analysis TEXT - NULL - - 难度分析,JSON格式存储
share_url VARCHAR 255 NULL - - 分享链接

字段详细说明

  • report_id: 学习报告唯一标识符,系统自动生成
  • goal_id: 关联的学习目标ID,外键引用goals表的goal_id
  • user_id: 关联的用户ID,外键引用user_info表的user_id
  • generate_time: 报告生成时间,默认为当前时间戳
  • accuracy: 学习正确率,范围0-100,保留两位小数
  • knowledge_analysis: 知识点分析数据,JSON格式存储各知识点的掌握情况
  • difficulty_analysis: 难度分析数据,JSON格式存储各难度等级的表现情况
  • share_url: 报告分享链接,用于分享学习成果

业务规则

  1. 报告生成规则:

    • 目标完成后自动生成学习报告
    • 根据答题记录统计正确率和分析数据
    • 支持手动重新生成报告
  2. 数据分析:

    • 知识点分析:统计各知识点的答题情况和掌握程度
    • 难度分析:分析不同难度题目的正确率和用时
    • 学习趋势:记录学习进步情况
  3. 数据关联:

    • 与目标表、用户表建立外键关联
    • 支持级联查询获取完整的报告上下文信息

5. AI对话记录表 (ai_chat)

表说明

存储用户与AI助手的对话记录,支持学习指导、答疑解惑等功能。

表结构

字段名 数据类型 长度 是否为空 默认值 主键 说明
chat_id BIGINT - NOT NULL AUTO_INCREMENT 对话ID,主键,自增
user_id BIGINT - NOT NULL - - 用户ID,外键关联user_info表
content TEXT - NOT NULL - - 消息内容
type TINYINT - NOT NULL - - 消息类型(0-用户,1-AI)
timestamp TIMESTAMP - NOT NULL CURRENT_TIMESTAMP - 消息时间戳

字段详细说明

  • chat_id: 对话记录唯一标识符,系统自动生成
  • user_id: 关联的用户ID,外键引用user_info表的user_id
  • content: 消息的具体内容,支持文本格式
  • type: 消息类型标识:
    • 0: 用户发送的消息
    • 1: AI回复的消息
  • timestamp: 消息发送时间,默认为当前时间戳

业务规则

  1. 对话管理:

    • 支持实时对话交互
    • 保存完整的对话历史记录
    • 支持对话记录的查询和清理
  2. AI集成:

    • 集成DeepSeek大模型提供智能回复
    • 支持学习指导和问题解答
    • 提供个性化的学习建议
  3. 数据关联:

    • 与用户表建立外键关联
    • 支持按用户查询对话记录

版本历史

版本 日期 修改内容 修改人
1.0 2025-01-29 初始版本,创建用户表和目标表 系统
1.1 2025-01-29 新增目标详情表(goal_of_detail),支持AI出题功能 系统
1.2 2025-01-29 新增用户答题记录表(user_answer),支持答题记录和统计分析 系统
1.3 2025-01-29 为goals表新增complete_time字段,记录目标完成时间 系统
1.4 2025-01-29 为goals表新增answer_duration字段,记录用户答题时长 系统
1.5 2025-01-30 新增学习报告表(study_report),支持学习报告生成和分享功能 系统
1.6 2025-01-30 新增AI对话记录表(ai_chat),支持AI助手对话功能 系统
1.7 2025-01-30 完善学习报告详情页面,支持知识点分布和难度分析 系统

最后更新时间: 2025-01-30