数据库文档

Coming from Ding Quan's Group:
https://github.com/nkucs/opep/wiki/数据库文档

用户角色相关

user 用户表

  • id:用户表id,自增主键
  • password_hash:密码
  • name:用户名
  • id_user_status:【来自user_status的外键】标识用户状态
  • email:用户电子邮件
  • id_gender:【来自gender的外键】标识用户性别

student 学生表

  • id:学生表id,自增主键
  • student_number:学生编号
  • id_user:【来自user的外键】是哪个user的特化
  • rank_score:标明积分
  • room:寝室
  • province:省份
  • class:班级

teacher 教师表

admin 管理员表

user_status 用户状态表

gender 性别表

权限相关

permission 权限表

role 角色表

role_permission 角色拥有权限表

老师/管理员相关

course_teacher 课程拥有老师表

course_teacher_type 课程拥有老师角色类型表

区分主讲教师和助教

teacher_role 老师所属角色表

admin_role 管理员所属角色表

学生相关

rank_history 学生历史排名表

follow 学生关注表

annual_report 年度报告表

achievement 成就类型表

student_achievement 学生成就表

课程相关

course 课程表

  • id:课程表id,自增主键
  • code:课程编号
  • name:课程名称
  • start_time:课程开始时间
  • end_time:课程结束时间
  • description:课程描述
  • created_at:课程创建/复制时间
  • modified_at:课程最近修改时间

course_student 学生参与课程表

message 课程消息表

course resourse 课程资源表

  • id:课程资源id,自增主键
  • name:课程资源名
  • path:课程资源存储路径
  • size:课程资源大小
  • created_at:课程资源创建时间
  • modified_at:课程资源上次修改时间

lecture 主讲课表

  • id:主讲课表id,自增主键
  • id_course:【来自course的外键】属于哪个课程
  • name:主讲课名称
  • description:主讲课描述
  • created_at:主讲课创建/复制时间
  • modified_at:主讲课最近修改时间

lecture_course_resourse:主讲课资源表

lab 实验课表

  • id:实验课id,自增主键
  • id_course:【来自course的外键】属于哪个课程
  • name:实验课名称
  • description:实验课描述
  • start_time:实验课开始时间
  • end_time:实验课结束时间
  • attachment_weight:实验报告占比成绩权重
  • problem_weight:实验题目占比成绩权重
  • created_at:课程创建/复制时间
  • modified_at:课程最近修改时间
  • report_required:是否需要提交实验报告

lab_course_resourse:实验课资源表

题目相关

problem 题目表

  • id:题目id,自增主键
  • code:题目编号
  • name:题目名称
  • description:题目描述
  • runtime_limit:运行时长限制
  • memory_limit:运行空间限制
  • created_at:课程创建/复制时间
  • modified_at:课程最近修改时间
  • id_teacher:【来自teacher的外键】出题老师编号

tag 标签表

  • id:标签id,自增主键
  • name:标签名
  • type:标签类型【0代表题目标签,1代表测例标签

problem_tag 题目标签表

存储题目和标签的一对多关系

case 测例表

  • id:测例id,自增主键
  • input:测例输入
  • output:测例输出
  • type:测例类型【0代表测试案例,1代表示例案例
  • id_problem:【来自problem的外键】测例所属问题
  • weight:每个测例在问题计分中所占权重

case_tag 测例标签表

存储测例和标签的一对多关系

case_status 未通过案例错误类型表

language 语言表

注意此处在别的表中不会使用外键进行访问,而是用二进制掩码进行信息存储

lab_problem 实验课题目表

  • id:实验课题目id,自增主键
  • id_lab:【来自lab的外键】属于哪个实验课
  • id_problem:【来自problem的外键】标识哪道题目
  • weight:该题目在当次实验课所占权重
  • language:二进制掩码【10011(2)表示使用language表中编号为1,2,16的语言】标识使用语言

lecture_problem 练习题表

  • id:练习题id,自增主键
  • id_lecture:【来自lecture的外键】属于哪个主讲课
  • id_problem:【来自problem的外键】标识哪个题目
  • language:二进制掩码【10011(2)表示使用language表中编号为1,2,16的语言】标识使用语言

提交相关

problem_submission 题目提交表

  • id:提交id,自增主键
  • id_problem:【来自problem的外键】提交属于哪个题目
  • id_student:【来自student的外键】提交属于哪个学生
  • code:提交代码
  • created_at:提交时间
  • runtime:运行用时
  • memory:运行内存
  • IP:提交地址

problem_submission_case 未通过提交的未通过案例表

  • id:未通过提交的未通过案例id,自增主键
  • id_problem_submission:【来自problem_submission的外键】属于哪个提交
  • id_case:【来自case的外键】属于哪个案例
  • id_case_status:【来自case_status的外键】属于哪个错误状态
  • output_info:对外报错信息

lab_submission 实验课提交表

每个学生,每次实验提交只有一条记录,重复提交需修改数据库记录

  • id:实验课提交id,自增主键
  • id_student:【来自student的外键】标识哪个学生提交
  • id_lab:【来自lab的外键】属于哪个实验
  • submission_time:提交时间
  • attachment_grade:实验报告成绩
  • problem_grade:实验题成绩

lab_submission_problem_submission 实验课题目提交表

  • id:实验课题目提交id,自增主键
  • id_lab_submission:【初始为空】【来自lab_submission的外键】标识本次题目提交最终纳入到哪次实验课提交中
  • id_problem_submission:【来自problem_submission的外键】标识哪次题目提交
  • id_lab:【来自lab的外键】属于哪个实验课【区分多个lab使用同一道题目

attachment:实验报告表

包含来自实验课提交的外键和存储路径

lecture_problem_submission:练习题提交表

  • id:练习题提交id,自增主键
  • id_lecture:【来自lecture的外键】属于哪个主讲课
  • id_problem_submission:【来自problem_submission的外键】标识哪次提交

考试相关

exam 考试表

  • id:考试id,自增主键
  • id_course:【来自course的外键】属于哪个课程
  • name:考试名称
  • start_time:考试开始时间
  • end_time:考试结束时间
  • description:考试描述
  • created_at:考试创建时间
  • modified_at:考试上次修改时间

student_exam 学生考试表

  • id:学生考试id,自增主键
  • id_student:【来自student的外键】标识哪个学生
  • id_exam:【来自exam的外键】标识哪次考试
  • type:标识AB卷
  • grade:学生成绩
  • password:学生登录密码
  • finished:学生是否提前结束考试

student_exam_submission 学生考试提交表

exam_problem 考试题目表

  • id:考试题目id,自增主键
  • id_exam:【来自exam的外键】属于哪次考试
  • id_problem:【来自problem的外键】包含哪个题目
  • type:标识AB卷
  • weight:计分权重
  • language:二进制掩码【10011(2)表示使用language表中编号为1,2,16的语言】标识使用语言