You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学校课程表数据库模型设计求助:适配新增业务需求

课程表数据库模型设计方案

核心思路

将周期性课程模板与实际排定的单节课分离存储,解决原模型中系列课程与单节实例绑定过紧的问题,同时满足打分、系列编辑、单节调整的需求。

完整表结构设计

1. 基础实体表(保留原有设计)

Subjects
id: int (主键)
name: string (科目名称,如English、Programming)
Groups
id: int (主键)
name: string (群组名称,如A组、B组)

2. 周期性课程模板表

存储课程的重复规则,用于生成默认的排课实例:

LessonTemplates
id: int (主键)
subject_id: int (外键关联Subjects.id)
group_id: int (外键关联Groups.id)
name: string (课程系列名称,如"A组编程课")
start_date: date (系列开始日期)
end_date: date (系列结束日期)
start_time: time (默认开始时间)
end_time: time (默认结束时间)
day_of_week: enum (Monday-Sunday,默认每周授课日)
repeat_type: enum (可选,如weekly/monthly,按需扩展)

3. 实际排课实例表

存储每一节具体的课程,包括模板自动生成的和手动调整的:

ScheduledLessons
id: int (主键)
template_id: int (外键关联LessonTemplates.id,为空则为独立课)
actual_date: date (实际授课日期)
actual_start_time: time (实际开始时间)
actual_end_time: time (实际结束时间)
is_custom: boolean (标记是否为手动调整的课程,默认false)
status: enum (可选,如scheduled/finished/canceled,标记课程状态)

4. 成绩表

与实际排课实例绑定,确保成绩与具体授课事件关联:

Grades
id: int (主键)
scheduled_lesson_id: int (外键关联ScheduledLessons.id)
user_id: int (关联学生ID)
grade: int? (分数,可为空表示未打分)
comment: string (可选,评语)

需求适配说明

1. 为单节课打分

成绩直接关联ScheduledLessons的具体实例,无论后续模板或其他课程如何调整,已录入的成绩始终对应实际发生的那节课,不会出现日期不匹配的问题。

2. 编辑整个课程系列

  • 修改LessonTemplates中的规则(如提前1小时、更改授课日)
  • 批量更新所有未发生且is_custom=false的ScheduledLessons,将其实际时间/日期同步为新规则
  • 已完成的课程(status=finished)或手动调整过的课程(is_custom=true)保持不变,避免影响已录入的成绩

3. 调整系列中的单节课程

直接修改对应ScheduledLessons的actual_date/actual_start_time/actual_end_time,并将is_custom设为true。后续修改模板规则时,该课程不会被批量更新,独立保留调整后的状态。

额外优化建议

  • 新增LessonTemplateHistory表,记录模板的修改历史,便于回溯系列课程的变更过程
  • 在创建模板时,可预先生成所有ScheduledLessons实例,也可按需动态生成(如查询时生成未来的课程),根据性能需求选择

内容的提问来源于stack exchange,提问作者student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:55:21