我需要实施计划,此计划应该是任何帐户的个人计划。这意味着,它可以修复(5个工作,Sa和Su - 休息日),或者它可以浮动(一天工作,一天休息)。此外,每天都可以拥有自己的工作时间跨度。 此外,每个工作小时跨度都有绑定的事件。 所以它很复杂。 主要目标 - 在前端显示日期选择器,防止用户在休息日或已经有附加事件的时间内选择日期。 我决定只在MySQL +事件表中存储模式,具有确切的日期并参考工作时间跨度。 整个实体关系现在看起来像这样:
Account->Schedule
Schedule->WorkingWeeks (number: 1 means every 1st week is working and no weeks-off, 2 means 1st week is off, 2nd working, than again off etc., Days)
WorkingWeek->Days (number: 1 means every 1st day is working and no days-off, 2 means 1st day is off, 2nd working, than again off etc.)
Day->Hours (just list of hours like 9-10,11-12, so 10-11 is break in work)
因此会有几个联接,最后一次加入将与事件表一起显示几小时没有该特定日期的事件。
所有这些都将传递给前端,JS将从中获取日期选择器。 这是理智的方法还是我应该使用别的东西?我是新手,所以我很感激任何帮助...
答案 0 :(得分:2)
您的数据模型实际上可以适用于您的业务用例。
有时让数据模型与业务案例紧密结合只是为了简化数据获取和可视/业务用例之间的转换。其他时候,更通用地尝试和建模数据结构是有用的,以便为潜在的下游变化提供更灵活的设计。
但是我会敦促你考虑覆盖多个时间表的想法。
例如,在全球范围内定义一个假期时间表可能很有用,其中包括时间完全不可用的时间/日期,因为工作人员已关闭等等。将此定义一次而不是按每个帐户定义是有用的,因为单个更改可以是在数据模型中复制。
然后,要显示复合计划视图,只需获取所有关联的计划,包括全局计划,并根据数据模型中的数据根据需要标记可用/不可用的适当小时数。