每位员工都有一个基本时间表,例如凌晨2点开始时间,周三/周四休息.任何给定周的员工日程安排将是由例外情况修改的基准日程表,例如:
>休假请求
>与另一名员工轮班转换一天
>缺席的叶子(基本上是另一种形式的休假)
>根据计划管理员的公司需求安排更改
数据库只需存储基本计划,并以某种方式显示给定周的计划.它不需要任何高级逻辑,如基于可用性的调度.
我可以看到几种方法来实现它.我想到的第一个问题是存储基本计划,然后根据需要动态生成给定周的计划,方法是将基本计划与基于上述例外的表(时间关闭,交换机等)相结合.但是,我看不到如何存储基本计划以及如何将基础与例外合并以生成计划.我会想像baseSchedule(PKScheduleID,FKEmployeeID,DayOfWeek,StartTime)这样的表,但我不确定.
另一种方法是在表格中生成每周时间表,例如使用此处描述的“三表Kimball Star”方法:http://www.damirsystems.com/?p=466.基本上,它创建一个充满日期的表,并与员工建立多对多关系以定义时间表.我不喜欢这种方法有很多原因,例如每次添加时都需要在应用程序级别检查/修改该表等,以及需要在表中“生成”新的计划.此外,这可能会膨胀到2000名员工,我担心糟糕的Access会在每个员工每天都有记录的火焰中爆炸.
有没有人有任何实现基本计划修饰方法的设计思路?我很乐意只使用查询来生成日程安排,但如果有必要,我很乐意使用VBA.
谢谢
编辑8/19/11 4:30 pm:
我想我会选择与bluefeet的答案非常相似的东西.下面是我在空白数据库中模拟的设计:
每位员工在一周中的每一天都会在基本表中记录一个记录,其中包含开始时间和计划工作的小时数.还有一个Exceptions表,其中列出了对日程表,员工和他的新班次的日程表的修改.
对于应用程序级别表单和报告,我将基本计划拉入一个记录集,其中包含一个非常草率的查询,输出如下内容:
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的输出结合起来,请告诉我.
再次感谢
解决方法
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人,它似乎工作.这可能是您的起点.