2012-02-08 69 views
1

我有三个表:避免争食任命进入

Employee(Id,name etc) 
Appointment(Id,date,time,employee id, clientid etc) 
Client(Id,name etc) 

EMPLOYEE表有一个1对多用一样的客户表约会表。

但是,我试图实现的是允许系统防止重复或冲突约会,但不能完全让我的头如何去做这件事。我是否需要一个附带可用时间段的表格以及一些如何将它们连接在一起的表格?或者,例如,还有一个员工可用性表?

或者我可以通过操作查询来实现我所需要的功能吗?

非常感谢

+0

约会最后一次? – 2012-02-08 14:02:29

+0

可能在半小时到一小时之间。那么假设半小时的时间段是安全的? – mjsey 2012-02-08 14:06:25

+0

将15小时的时间分配给15分钟的预约是否可以接受?最少约半个小时,半小时时间内约会是否增加? – Fionnuala 2012-02-08 15:14:29

回答

1

我认为约会表将是必要的。它将允许您仅包含可用的插槽,并且还可以分析员工的工作负载和可用性。该表将包括每个员工每天15分钟的时间。您可能希望为节假日/病假日添加更多表格/通常无法在大量时间内使用。

编辑

我曾设想上线的东西:

Timeslots: 
EmployeeID) Primary key 
TimeSlot ) 
JobID  - Foreign key 
Status ) And so forth 
Notes  ) 

“我想用E1早期预约”

SELECT TimeSlots.EmployeeID, TimeSlots.TimeSlot, TimeSlots.JobID 
FROM TimeSlots 
WHERE TimeSlots.EmployeeID=1 
AND TimeSlots.TimeSlot Between #2/9/2012 9:0:0# And #2/9/2012 11:30:0# 

“我想在上午9:00预约“

SELECT TimeSlots.EmployeeID, TimeSlots.TimeSlot, TimeSlots.JobID 
FROM TimeSlots 
WHERE TimeSlots.TimeSlot Between #2/9/2012 9:0:0# And #2/9/2012 9:30:0# 
+0

雇员(Id,开始时间,结束时间和日期)名称等) 我假设在那里实现我想要的东西,我只是产生一个查询,检查所需的时间段和日期对可用的? 我现在开始对我的脑袋有点头了,这会有什么可能的例子吗? 非常感谢您的帮助,非常感谢 – mjsey 2012-02-08 23:32:08

1

为了防止碰撞,这里的逻辑是非常简单的:发生

碰撞时:

RequestStartDate <= EndDate 
and 
RequestEndDate >= StartDate 

以上是因此而不是简单地查询。如果发生任何冲突,上面的 将返回记录,您根本不允许预订。

以上当然可以很容易地延长时间,甚至一个特定的房间。

如:

RequestStartTime <= EndTime 
and 
RequestEndTime >= StartTime 
And 
RequestDate = BookingDate 

而事实上,在访问,因为你可以存储日期+时间列,那么我们相当多回以上(作为这样的预订的第一个例子可以跨越多天,如果你做这个)。如上所述,如果这是针对特定房间,那么只需在上面添加房间条件即可。

Access 2010中确实有表触发器和存储过程,但因为你需要为用户界面,那么这样的代码通常做的伎俩:

dim strWhere     as string 
dim dtRequeestStartDate  as date 
dim dtRequestEndDate   as date 

dtRequestStartDate = inputbox("Enter start Date") 
dtRequestEndDate = inputbox("Enter end date") 

strWhere="#" & format(dtRequestStartDate,"mm/dd/yyyy") & "# <= EndDate" & _ 
    " and #" & format(dtRequestEndDate,"mm/dd/yyyy") & "# >= StartDate" 


if dcount("*","tableBooking",strWhere) > 0 then 
    msgbox "sorry, you cant book 
...bla bla bla.... 

以上只是一个例子,我确定你会建立一个很好的表单, 提示用户预订日期。

所以上述简单的条件确实会返回任何冲突。而且写了这么多预订系统,我强烈建议你不要提前创建空白记录,而是使用上述正确的逻辑,因此只需将记录添加到预订系统中,而不必编写大量代码来创建一堆空白带时间片的记录等。

上面的简单查询可以防止碰撞。