2

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

  1. 为我的 10 位同事制定工作计划以取乐

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

  3. 使用 mySQL

我无法理解设置 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

它效率低下,因为“日期”字段在一年中的每一天都会有很多条目......有没有更好的方法?

4

1 回答 1

2

一个非常有趣的问题,也是一个出了名的难题。阅读 Scott Rosenberg 的Dreaming in Code,了解与此问题和类似问题的一些斗争。

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

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

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

对于这类事情的精彩实现,请查看 Google 日历的重复约会功能集。

于 2012-08-11T18:48:34.797 回答