数据库表文档.md 9.4 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 - 创建时间

字段详细说明

  • 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: 目标创建时间,默认为当前时间

业务规则

  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建立外键关联
    • 删除目标时,相关题目也会被级联删除

表关系

外键关系

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

    • 一个用户可以有多个学习目标
    • 每个学习目标只属于一个用户
  • goal_of_detail.goal_idgoals.goal_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. 数据清理: 定期清理过期的已完成目标数据

版本历史

版本 日期 修改内容 修改人
1.0 2025-01-29 初始版本,创建用户表和目标表 系统
1.1 2025-01-29 新增目标详情表(goal_of_detail),支持AI出题功能 系统

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