【问题标题】:Representing Work Hours/Schedule in Relational Database在关系数据库中表示工作时间/时间表
【发布时间】:2012-04-10 02:02:27
【问题描述】:

我正在为临时工/兼职人员开发一个可搜索的数据库,但我没有实施他们的工作时间可用性的经验。我已经为员工、技能、代理和客户开发了模式。现在我需要捕捉员工每小时的空闲时间。

系统应该能够表示 24/7 小时时间表的任意组合,即:

  • 周一 8 点至 9 点,周二 1 点至 5 点,周三 3 点至 10 点;
  • 周一至周五下午 1 点至 4 点;
  • 周六至周日上午 8 点至下午 6 点;

当然会有偶尔的异常值谁会全职,虽然我认为在员工表中会有一个全职的布尔字段,并且只会参考这个时间表表/系统如果员工是兼职。

对此的任何经验/指导/方向将不胜感激。

【问题讨论】:

    标签: database relational-database entity-relationship schedule


    【解决方案1】:

    我将通过关注每个用户每天的可用性来建模它,并使用以下列:

    a) 第 (1-7) 天,其中 1 是星期日,7 是星期六,遵循 MySQL 约定

    b) 开始时间 - 如果不可用,开始时间可以为空

    c) 结束时间 - 如果不可用,结束时间可以为空

    d) 备注 - 关于当天可用性的任何备注

    e) userid(显示日程的用户的id)

    f) 不可用 - 是/否

    这意味着每个用户将有 7 条可用性记录。但是,在用户面上,您可以进行调整以将数据从一天复制到另一天

    【讨论】:

    • 感谢@ssmusoke,正在为此努力。 Day 会是 INT 类型吗?你到底是什么意思“MySQL约定”? :D
    • 星期有不同的约定,但是 MySQL 使用 1 作为星期日,7 代表星期六,但有些语言使用 0 代表星期日,6 代表星期六。我建议你使用 tinyint unsigned(意味着它只能是 +ve),它从 1 到 128,因为这足以满足你的需要。 Int 高达 20 亿,因此您不需要所有这些。
    • aaiyt,我最后做的是添加一个额外的表 Empl_Schedule,只有字段 Empl_IDEmpl_DayEmpl_Time - 所有 tinyint 无符号,都作为复合主键。 Empl_Day 将具有值 1,2..7Empl_Time 0,1..23。将在员工可用的任何一天的每一小时进行一行输入。最后在Employee 表上有一个布尔字段FullTime。谢谢,@ssmusoke
    • 单列时间不考虑,上午 8 点到 9 点,下午 3 点到 10 点等,这就是为什么您需要开始和结束时间列
    • 这实际上是可能的:假设 Empl_ID 是 12,周一上午 8 点到 9 点,下午 3 点到 10 点将是 (12, 2, 8), (12, 2, 15), (12, 2, 16), (12, 2, 17), (12, 2, 18), (12, 2, 19), (12, 2, 20), (12, 2, 21) :)
    【解决方案2】:

    为什么不只是在时间间隔和用户之间创建关联呢? 如果您知道,这是 1 周的循环,您可以选择任何给定的一周。 如果你知道,它是 1 个月的循环,你可以选择任何给定的月份等等......

    StartAvailableDateTime1 日期时间,
    可用日期时间 2 日期时间,
    用户 ID INT

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2011-04-23
      • 2011-07-19
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多