我在一个辅导项目上工作,我很难决定哪个是在数据库中保存学生日程安排的最佳方法。
时间表的信息很简单,有主题,星期几,开始和结束时间,
所以我想知道是否更好地为当前学校日历中的所有科目和日期生成并保存整个日历。
我使用的工具可以帮助我绘制日历,我必须用开始和结束日期来提供它。
因此,在db中生成整个日历更容易。
我认为的另一种方式是保存de de name,开始和结束时间,并生成一个“伪造”日期的功能,以便我可以加载日历。
感谢阅读,如果我不清楚,抱歉并请评论
我相信以下是标准化的数据结构:
日期
学生
类
ClassMember
ClassDefaultMeetingDays
Children子
其中一些表格不言自明。其他人可能需要一些澄清:
ClassMember
学生和班级之间有多对多的关系(即学生可以参加多个班级,班级可以有多个学生)为此,你需要一个(联络表)[https://support.airtable.com/hc/en-us/articles/218734758-A-beginner-s-guide-to-many-to-many-relationships]]
ClassDefaultMeetingDays
虽然您可以在类表上存储开始和结束时间等信息,但实际上您需要一个单独的表来存储类遇到的星期几,因为这是一对多的关系。
Children子
这将是您的应用程序的核心,因为这将是您提供给日历应用程序的内容。将其拆分为单独的表的优点是您可以根据需要进行编辑。如果您只是从Class,Date和ClassDefaultMeetingDays表中派生它,那么因为假期而取消课程,或者由于某些特殊事件而缩短课程时,您将会瘫痪。将其作为一个单独的表构建,允许您使用默认逻辑(可能通过存储过程?)填充此表,然后您可以为用户提供微调控件以便临时编辑。
ECON101表示,从学期到学期,同一班级的开始和结束时间以及每周的几天都可能会发生变化。存储ClassInstances意味着您可以编辑类会议时间信息而不会丢失历史数据。
用于填充表中的默认记录的查询/存储过程:
DECLARE @SemesterStart date
DECLARE @SemesterEnd date
SELECT @SemesterStart = x
SELECT @SemesterEnd = y
SELECT INTO ClassInstance
Date.Date + CAST(Class.DefaultStartTime as datetime) AS StartDateTime
Date.Date + CAST(Class.DefaultStartTime as datetime) AS EndDateTime,
Class.Id AS ClassId
FROM Class
JOIN ClassDefaultMeetingDays
ON ClassDefaultMeetingDays.ClassId = Class.Id
JOIN Date ON
ClassDefaultMeetingDays.DayOfWeek = Date.DayOfWeek
AND Date.Date BETWEEN @SemesterStart AND @SemesterEnd
然后,您可以根据需要进行编辑和查询此表!