我正在从事补习项目,但在确定哪种方法是将学生时间表保存到数据库中的最佳方法方面遇到困难。
日程表的信息很简单,它具有主题,星期几以及开始和结束时间,
所以我想知道从当前学校日历生成和保存所有学科和日期的整个日历是否更好。
我正在使用可以帮助我绘制日历的工具,我必须在日历中输入开始和结束日期。
因此,在数据库中生成整个日历比较容易。
我认为的另一种方法是保存de day的名称,以及开始和结束时间,并生成一个“伪造”日期的函数,以便我可以加载日历。
感谢阅读,如果我不清楚,抱歉,请发表评论
答案 0 :(得分:0)
我相信以下是标准化的数据结构:
日期
学生
班级
ClassMember
ClassDefaultMeetingDays
ClassInstance
其中一些表是不言自明的。其他人可能需要澄清:
ClassMember
您与一个班级之间存在多对多的关系(即一个学生可以参加多个班级,一个班级可以有多个学生)为此,您需要一个(连接表)[{{3 }}
ClassDefaultMeetingDays
虽然您可以在“班级”表上存储“开始时间”和“结束时间”之类的信息,但实际上您需要一个单独的表来存储班级在一周的哪几天开会,因为这是一对多的关系。
ClassInstance
这将成为您应用程序的核心,因为这就是您要输入到日历应用程序中的内容。将其拆分为单独的表的好处是您可以根据需要对其进行编辑。如果仅从Class,Date和ClassDefaultMeetingDays表中派生该类,则由于假期而取消类或由于某些特殊事件而缩短了时间时,您将会受到损害。将其构建为单独的表可以使您使用默认逻辑(也许通过存储过程来填充此表),然后可以给用户微调的控件以临时编辑。
ECON101表示,对于同一个班级,每个学期的学期开始和结束值以及星期几可能会发生变化。存储ClassInstances意味着您可以编辑Class Meeting Time信息,而不会丢失历史数据。
查询/存储过程以填充表中的默认记录:
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
然后您可以进行编辑并根据需要查询该表!