Sql 为类调度设计数据库模式
我试图设计一个数据库模式来模拟大学的课程表。通常类运行MWF或TuTh。实现将使用MySQL完成。设计用于处理上课天数/时间的表格的最佳方法是什么?我当前的表如下所示: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
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”。枚举有限集合的组合可能是个好主意,但我仍然会将每一天映射到复合组,而不是用一个字符串来保存多个数据项。关系数据库中的逗号分隔列表是一种非常危险的反模式。你能列举一下这种方法的相对优点和缺点吗?由于答案的这一部分目前仍然有效,我必须尽可能避免此类选项。感谢您的反馈。我考虑了一下,决定同意你的看法。我几乎不会在自己的设计中使用逗号分隔的值,所以我可能不应该向其他人推荐它。我已经更新了我的答案。干杯