所以,我之前在php中开发了员工调度系统。这非常低效。当我创建一个新的计划时,我在名为“schedules”的表中生成了一行,并且对于受该计划影响的每个员工,我在名为“schedule_days”的表中生成了一行,该行为该特定日期提供了开始和停止时间。 。此外,编辑时间表也是一个残骸。在编辑页面上,我从特定的时间表中提取了数据库中的每个用户,并将其打印在页面上。这很合乎逻辑,但速度很慢。
您可以想象,为期一周的时间表加载约15名员工需要多长时间。对于每个用户,这将是1个查询计划,1个查询,每个用户每天7个查询。如果我有15个用户,则查询太多。所以我只是问,其他人对最佳方法的看法是什么?
答案 0 :(得分:2)
对于基于轮播的计划,您希望使用基于排除的系统。如果您知道员工x在日期范围z内轮流工作,那么您可以动态计算该员工的个人日期。如果他们生病/正在/等等,请在当天为员工添加一项例外情况。这将使数据库比每位员工每天跟踪要小得多。
table employee {EmployeeID}
table employeeRotations {EmployeeRotationID, EmployeeID, RotationID, StartDate, EndDate}
table rotation {RotationID, NumberOfDays, StartDate}
table rotationDay {RotationDayID, RotationID, ScheduledDay, StartTime, EndTime}
table employeeExceptions {EmployeeExceptionID, ExceptionDate, ExceptionTypeID (or whatever you want here)}
从那里,您可以编写一个函数,在任何给定日期或任何给定周内返回On / Off / Exception。
答案 1 :(得分:2)
听起来你需要学习如何进行JOIN而不是为每个项目进行多次往返服务器。