【问题标题】:Database structure for scholar schedules saving subjects学者计划保存科目的数据库结构
【发布时间】:2019-02-27 09:38:15
【问题描述】:

我正在从事一个辅导项目,但我无法确定哪种方法是在数据库中保存学生日程的最佳方法。

日程信息很简单,有主题、星期几、开始和结束时间,

所以我想知道是否更好地为当前学校日历中的所有科目和日期生成并保存整个日历。

我正在使用一个可以帮助我绘制日历的工具,我必须为其提供开始和结束日期。

所以在数据库中生成整个日历更容易。

我认为的另一种方法是保存日期名称、开始和结束时间,并生成一个“伪造”日期的函数,以便我可以加载日历。

感谢阅读,如果我不清楚,对不起,请评论

【问题讨论】:

    标签: database database-design data-modeling


    【解决方案1】:

    我相信以下是规范化的数据结构:

    日期

    • 日期
    • 星期几

    学生

    • 身份证
    • 姓名

    • 身份证
    • 姓名
    • 默认开始时间
    • 默认结束时间

    班级成员

    • 学生编号
    • 类 ID

    ClassDefaultMeetingDays

    • 类 ID
    • DayOfWeek

    类实例

    • 类 ID
    • 开始日期时间
    • 结束日期时间

    其中一些表格是不言自明的。其他人可能需要澄清一下:

    班级成员

    学生和班级之间存在多对多关系(即一个学生可以参加多个班级,一个班级可以有多个学生)为此,您需要一个(连接表)[https://support.airtable.com/hc/en-us/articles/218734758-A-beginner-s-guide-to-many-to-many-relationships]

    ClassDefaultMeetingDays

    虽然您可以在班级表上存储开始和结束时间等信息,但实际上您需要一个单独的表来存储班级在一周中的哪几天上课,因为这是一对多的关系。

    类实例

    这将成为您的应用程序的核心,因为这是您将提供给日历应用程序的内容。将其拆分为单独的表的好处是您可以根据需要对其进行编辑。如果您只是从 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
    

    然后您可以根据需要进行编辑和查询此表!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2019-11-13
      • 2019-12-30
      • 2018-10-03
      • 1970-01-01
      • 2013-12-28
      • 2019-11-30
      相关资源
      最近更新 更多