Sql 为类调度设计数据库模式

Sql 为类调度设计数据库模式,sql,database-design,Sql,Database Design,我试图设计一个数据库模式来模拟大学的课程表。通常类运行MWF或TuTh。实现将使用MySQL完成。设计用于处理上课天数/时间的表格的最佳方法是什么?我当前的表如下所示: Time int TimeID (primary key) Time ClassStartTime Time ClassEndTime int DaysOfWeekID (foreign key) DaysOfWeek int DaysOfWeekID (primary key) varchar Day

我试图设计一个数据库模式来模拟大学的课程表。通常类运行MWF或TuTh。实现将使用MySQL完成。设计用于处理上课天数/时间的表格的最佳方法是什么?我当前的表如下所示:

Time
  int TimeID (primary key)
  Time ClassStartTime
  Time ClassEndTime
  int DaysOfWeekID (foreign key)

DaysOfWeek
  int DaysOfWeekID (primary key)
  varchar DaysOfWeek

上述时间表将链接到TimeID上的“类”表。我觉得会有更好的方法,尤其是在处理一周中的几天时。有一个专用的“星期几”类型将更好地用于前端解析,因为我计划用数据库实现日历。有什么建议吗?提前感谢

通过这种方法,课程可以从一周中的任何一天开始,而一周中的不同日子可以运行到不同的时间。有些课程有一个运行MWRF或MTWF的“实验室”。周二/周四有实验室。这种方法的缺点是您必须记录每天的开始/结束时间

Class
  ClassID

DaysofWeek
DaysOfWeekID

ClassHours
ClassID
DaysofWeekID
StartTime
EndTime
一堂课有零个或多个学时。
一个课时只属于一个班级 上课时间属于一周中的一天,并且只属于一周中的一天
一周的一天属于零到多个课时。

有许多方法可以对此进行建模。这在很大程度上取决于数据的外观——例如,您说类“通常”运行MWF或TuTh——并且很大程度上取决于您计划如何使用它

类似的方法可能会奏效:

Class
  Id int (PK)
  StartTime Time
  EndTime Time

Class_DayOfWeek
  ClassId int (FK)
  DayOfWeekId int (FK)

DayOfWeek
  Id int (PK)
  Name varchar -- Monday, Tuesday, etc.

如果课程在不同的日子、不同的时间举行,你需要更进一步。如果你想处理日程安排资源(如教师和教室),你需要更进一步。。。但希望这会有所帮助。

无论您选择什么,我强烈建议不要使用包含多个数据项的单个值。例如,您应该(在我看来)在外键上键入两条记录,或者可能有7个字段标记为true/false,而不是一个字符串包含“TuTh”。枚举有限集合的组合可能是个好主意,但我仍然会将每一天映射到复合组,而不是用一个字符串来保存多个数据项。关系数据库中的逗号分隔列表是一种非常危险的反模式。你能列举一下这种方法的相对优点和缺点吗?由于答案的这一部分目前仍然有效,我必须尽可能避免此类选项。感谢您的反馈。我考虑了一下,决定同意你的看法。我几乎不会在自己的设计中使用逗号分隔的值,所以我可能不应该向其他人推荐它。我已经更新了我的答案。干杯