【问题标题】:Employee schedule entity relationship员工排班实体关系
【发布时间】:2016-03-19 04:55:37
【问题描述】:

我需要实施计划,并且该计划对于任何帐户都应该是单独的。这意味着,它可以是固定的(5 工作,Sa 和 Su - 休息日),也可以是浮动的(一天工作,一天休息)。此外,每天都可以有自己的一组工作时间跨度。 还有一些事件绑定到每个工作时间跨度。 所以很复杂。 主要目标 - 在前端显示日期选择器,防止用户在休息日或已经附加事件的时间选择日期。 我决定将模式存储在 MySQL + events 表中,其中包含确切的日期和参考工作时间跨度。 整个实体关系现在看起来像这样:

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 将从那里构建一个日期选择器。 那是一种理智的方法,还是我应该使用其他方法?我是新手,如果有任何帮助,我将不胜感激......

【问题讨论】:

    标签: java mysql hibernate orm


    【解决方案1】:

    您的数据模型确实可以适用于您的业务用例。

    有时让数据模型与业务案例紧密结合是很有用的,这只是为了简化数据获取和可视化/业务用例之间的转换。其他时候,尝试更通用地对数据结构进行建模以允许对潜在的下游变化进行更灵活的设计是有用的。

    不过,我会敦促您考虑叠加多个时间表的想法。

    例如,在全局范围内定义假期时间表可能会很有用,其中包括由于员工休假等原因导致时间完全不可用的时间/日期。将其定义一次而不是按帐户定义会很有用,因为单个更改可以在整个数据模型中复制。

    然后要显示复合时间表视图,只需获取所有关联的时间表,包括全局时间表,并根据数据模型中的数据根据​​需要标记适当的可用/不可用时间。

    【讨论】:

    • 感谢您的评论。是的,你是对的,肯定会有全球假期表可以设置,比如国庆节等。我真正担心的是这里的join数量:我现在看到至少5个join。每次呈现页面时的连接数可能会减慢 MySQL 数据库或非常慢。还是没事?
    • @Battle_Slug 除非您要测试具有足够数据量的连接是否实际上是性能瓶颈,否则我不会太担心。如果需要,可以稍后对其进行调整以预先聚合数据。
    • 谢谢,到时候看看。我会尝试以这种方式实现并测试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多