【问题标题】:How to Implement Business Related Schedules in Relational Databases (e.g. Employee Schedules, Appointments, Courses and etc.)如何在关系数据库中实施与业务相关的时间表(例如员工时间表、约会、课程等)
【发布时间】:2011-07-19 22:27:14
【问题描述】:

我不知道该怎样写标题;如果不清楚,我很抱歉。我正在为一所职业学校开发一个关系数据库。我想在线为学生提供他们的课程表。我想让设计尽可能灵活。我想存储确切的日期和时间,包括期限和年份。我有兴趣了解你们中的任何人将如何处理这个问题。我也在寻找关于这个特定主题的书、培训视频、教程或讨论。

我不确定的部分是如何让天数因一个时间表而异。我理解这是一对多的关系;但是,我不确定在这种情况下应该如何设置它。还有闰年呢?

我的方法是在日程表中使用外键制作月/日表、年表和期限表。为了解决闰年,我只需将月/日表设为 366 天。我不确定这个想法是否过分,我正在寻找最优雅的解决方案来处理日程表中的任何实际变化。

如果我走得太远,我深表歉意,我一直在尝试自学关系数据库开发,但我才刚刚开始。

我希望时间表部分输出如下: 示例 A 类时间表: 2011 年 1 月 2 日下午 1:00-3:00 2011 年 1 月 3 日下午 2:00-4:00 2011 年 1 月 4 日下午 1:00-3:00 2011 年 1 月 5 日下午 2:00-5:00 2011 年 1 月 8 日下午 1:00-4:00 B类时间表示例: 2011 年 1 月 2 日下午 1:00-3:00 2011 年 1 月 3 日下午 2:00-4:00

【问题讨论】:

  • 这是作业吗?如果没有办法不买一个自我时间表系统,这个问题比大多数人的事情要困难得多......

标签: database sql-server-2008 database-design data-structures relational-database


【解决方案1】:

这里有一些业务规则;它们与大学相似:

  • 课程表不得 受限于任何模式
  • 课程表必须存储每个日期 并举行时间课程
  • 课程表必须包括 开始和结束时间
  • 类可能关联也可能不关联 有一个术语
  • 可以创建和存储计划 在上课前很久就在数据库中 提供
  • 学生必须能够看到 课程安排
  • 学生必须能够访问 他们的课程表 已注册

【讨论】:

    【解决方案2】:

    我可能了解也可能不了解您的业务需求,因此这可能是一个非常糟糕的建议。但是,我要说的是,如果表中唯一的东西是日历,则不要创建一个表来保存日期,而各个日期周围没有任何其他属性。

    如果您的日程安排是基于任意天数的轮换日程安排,例如“第 1 天”到“第 6 天”等,那么这应该有自己的表格,那么课程的出现就变成了轮换和上课的日子。每个交叉点都有一个日期和时间,以及班级和轮换日的外键。

    根据您的业务规则,术语可能会插入课堂上方或任意日程表上方。在任何情况下,术语表都应该包括开始和结束日期。

    对于闰年或一个月中的日子等,您不需要做任何特别的事情,因为 SQL 足够聪明,能够计算出与日期相关的查询。

    您能告诉我更多关于您制定日程安排的业务规则吗?如果是这样,也许我可以完善我的建议。

    【讨论】:

    • 感谢您抽出宝贵时间发表评论。我想我明白你的意思。我不需要制作日历,因为我可以使用日期和时间数据类型,其中还包括对闰年的支持。这实际上只是常识,但我无法想象它,而且我没有考虑或不知道 SQL 是否支持闰年。
    【解决方案3】:

    我根据您提到的内容提出了一个设计,我将其包含在下面。

    * 首要的关键 ~ 外键 Classes_Table *班级号 班级名称 班级编号 ~时间表ID Schedules_Table *时间表ID ~类ID Class_Schedule_Table(会有很多这样的表,每个 ScheduleID 1 个) *DayID 日期 开始时间 时间结束 ~TermID ~类ID ~时间表ID 条款_表格 *TermID 术语名称 学生表 *学生卡 学生姓名 Student_Schedules_Table *注册ID ~学生证 ~类ID ~时间表ID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 2023-03-05
      • 1970-01-01
      • 2021-04-16
      • 2019-07-05
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多