数据库结构:为日历工作名单/时间表(mySQL)设置表的最佳方法?

时间:2012-08-11 12:59:14

标签: mysql calendar

搜索后我找不到这样的问题所以我发帖了。

  1. 为10位同事制定工作时间表以获得乐趣

  2. 它是基于日历的(我们每周7天轮班,不同的班次有不同的职责 - (周一上午8点至下午5点任务1,周一上午8点至下午5点任务2,周六下午5点至上午8点(晚上)任务2,等)

  3. 使用mySQL

  4. 我无法绕过设置mySQL表的最佳方法。有人有这方面的经验吗?

    星期一说这个:

    Monday days - Joe - Task 1
    Monday days - Sally - task 2
    Monday days - Mike - task 3
    Monday nights - Bob - task 1,2,3
    Tuesday days - Joe - Task 1
    ..etc..
    

    显然这个表设置效率低下:

    id,  date, worker, shift, task
    

    这是低效率的,因为'date'字段在一年中的每一天都会有很多条目...有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

一个非常有趣的问题,一个众所周知的难题。阅读斯科特罗森伯格的梦想代码,了解一些与此类问题相似的问题。

您有一个基本的设计选择。您可以枚举日期和班次,也可以使用类似通配符的方案来描述时间间隔。 (例如“2013年的所有工作日”或“2012年9月的星期五和星期六”或你有什么。)

如您所见,枚举日期和班次会产生大量记录。但它很容易编程。而且,MySQL可以轻松处理数万条记录。

另一方面,类似外卡的方案更优雅。但它在语义上要复杂得多。 Unix / BSD / Linux crontab系统(http://crontab.org/)包含一种简单但丑陋的方式来指定这类东西。

要完美地实现此类功能,请查看Google日历的重复约会功能集。