调度数据库(基本计划+例外)

时间:2011-08-19 19:42:36

标签: sql database ms-access

目前,我们的员工安排在一家24/7公司为约800名员工安排Excel工作簿。我需要将所有调度都移到我设计的Access员工数据库中,这是我们多年来一直使用的。 (注意:我知道Access不是理想的平台,但它就是我所拥有的。)

每位员工都有一个基本时间表,例如凌晨2点开始,周三/周四休息。任何给定周的员工时间表将是由例外情况修改的基准时间表,例如:

  • 休假请求
  • 与其他员工轮班转换
  • 缺席的叶子(基本上是另一种形式的休假)
  • 根据计划管理员的公司需求安排更改

数据库只需存储基本计划,并以某种方式显示给定周的计划。它需要任何高级逻辑,例如基于可用性的调度。

我可以看到几种方法来实现它。我想到的第一个问题是存储基本计划,然后根据需要动态生成给定周的计划,方法是将基本计划与基于上述例外的表(时间关闭,交换机等)相结合。但是,我看不到如何存储基本计划以及如何将基础与例外合并以生成计划。我会想像baseSchedule(PKScheduleID,FKEmployeeID,DayOfWeek,StartTime)这样的表,但我不确定。

另一种方法是在表格中生成每周计划,例如使用此处描述的“三表Kimball Star”方法:http://www.damirsystems.com/?p=466。基本上,它创建了一个充满日期的表格,并与员工建立多对多关系以定义日程安排。我不喜欢这种方法,原因很多,例如每次添加时都需要在应用程序级别检查/修改该表等,以及需要在表中“生成”新的计划。此外,这可能会增加到2000多名员工,我担心糟糕的访问会在每个员工每天都有记录的火焰中爆炸。

有没有人有任何实现基本计划+修饰符方法的设计思路?我很想通过查询动态生成日程安排,但如果有必要,我很乐意使用VBA。

谢谢

编辑8/19/11 4:30 pm: 我想我会选择与bluefeet的答案非常相似的东西。以下是我在空白数据库中模拟的设计:

Design

每位员工在一周中的每一天都会在基本表中记录一个记录,其中包含开始时间和计划工作的小时数。还有一个例外表,列出了对日程表,员工和他的新班次的日程表的修改。

对于应用程序级别表单和报表,我会将 base 计划提取到一个记录集中,该记录集具有非常粗略的查询,输出如下内容:

Name  Mon     Tue     Wed     Thu     Fri     Sat     Sun
Alice 6:00 PM 6:00 PM Off     Off     2:00 PM 2:00 PM 2:00 PM
Bob   4:00 PM 4:00 PM 4:00 PM 4:00 PM Off     Off     4:00 PM 

然后,在VBA中,我还会将日期范围(一周)的异常拉入记录集。我将循环遍历异常记录集,修改基本记录集(从上面)。然后我将设置表单/报告以使用修改后的记录集。它有点不雅,但它可以很好地完成工作。

如果有人想知道如何将Base和Exceptions表与上面的输出结合使用,只使用查询而不使用VBA,请告诉我。

再次感谢

2 个答案:

答案 0 :(得分:2)

我的建议是拥有一个包含Employee Schedules的Base表,然后有一个包含例外的表。我在日历应用程序中有类似的东西。我有一个包含正常日程表的员工表,然后我有一个单独的表,其中包含例外 - 休假,早退,培训等。

EmployeeTable
PK - EmployeeID
EmployeeName
Schedule fields - starttime, endtime, days, etc

Employee_ExceptionTable
PK - EmployeeId
ExceptionTypeId
PK - ExceptionStartDate
ExceptionEndDate

ExceptionTypeTable
ExceptionTypeId
ExceptionName - Vacation, Leave Early, Training

由于Employee_ExceptionTable具有EmployeeId和ExceptionStartDate的键,因此每天只允许一个例外,但这些是基本计划的例外。正如我所说,我在我的应用程序中有类似的东西,监视大约100人,它似乎工作。这可能是您的起点。

答案 1 :(得分:0)

我想这是一种方法:
你有3张桌子:
员工(employee_id PK),日程安排员(employee_id FK)和 timeOff (employee_id FK)

调度
日期
employee_id(员工表FK)
START_TIME
END_TIME
day_off
评论

您的员工表将包含基本的员工信息。

scheduler 表将包含数据以及day_off的标志(如果是休息日则设置为1)和任何类型的注释的注释字段。

如果day_off设置为1,您将在 timeOff 表中描述day_off。
timeOff 表您可以按照自己想要的方式进行设计。你会有日期,所以你知道它是什么日子。你可以有理由字段,其中1 - 休假日,2 - 病假,3 - 个人日,4 - 与另一名员工切换等等。您可以在此处显示注释字段以及计划已切换的人员的employee_id