Ban*_*joe 8 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的答案非常相似的东西.下面是我在空白数据库中模拟的设计:

每位员工将在一周中的每一天在基本表中记录一个记录,其中包含开始时间和计划工作的小时数.还有一个例外表,列出了对日程表,员工和他的新班次的日程表的修改.
对于应用程序级别表单和报告,我将基本计划拉入记录集,其中包含非常草率的查询,输出如下内容:
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
Run Code Online (Sandbox Code Playgroud)
然后,在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
Run Code Online (Sandbox Code Playgroud)
由于 Employee_ExceptionTable 具有 EmployeeId 和 ExceptionStartDate 键,因此每天只允许一个例外,但这些都是基本计划的例外。正如我所说,我的应用程序中有类似的东西可以监控大约 100 人,而且它似乎有效。这可能是您的一个起点。