【问题标题】:SQL and NormalizationSQL 和规范化
【发布时间】:2013-08-11 05:01:18
【问题描述】:

这是一个设计决策,我真的很想得到一些建议。我正在尝试记录 员工的员工休息。此外,员工可能会在任何一天休息很多次。我应该采用什么策略?

我最初的想法是,一名员工可能需要多次休息,而一名员工可能需要一次休息。一对多。

但是,员工也可以(理论上)多次休息和一次休息 被许多员工 - 多对多。例如,约翰和弗雷德在中午 12 点休息,然后在下午 1 点返回。

尽管我倾向于选择一对多,但我们开始分道扬镳。例如,约翰在中午 12 点休息,弗雷德在中午 12 点离开,他们都在不同的时间段返回,比如下午 1 点和 1 点 3 点。

您能否针对此类场景提供一些良好的数据库设计实践?下面图片中的想法:

many to many one to many

【问题讨论】:

    标签: sql database-design normalization


    【解决方案1】:

    选择一对多。绝对

    您可以添加一个“标准休息时间”表,您可以在其中存储标准值,例如“12 比 1”的午餐休息时间。当一名员工(或一组员工)使用这些“标准休息时间”之一时,相应的“休息时间”行将添加到“休息时间”表中。

    最终,在更复杂的模型中,此“标准休息时间”表与“默认时间表”表相关联,例如,办公室员工可以从“午餐休息时间”中受益。

    您的表格可能如下所示:

    Tbl_Break:
        id_Break (primary key)
        id_Employee (not null)
        breakStartTime (not null)
        breakEndTime (not null)        
        id_StandardBreak (nullable)
    
    Tbl_StandardBreak:
        id_StandardBreak (primary key)
        standardBreakStartTime (not null)
        standardBreakEndTime (not null)
        standardBreakDescription (not null)
        id_Schedule (not null)
    

    在此配置中,您将管理员工和休息之间的一对多关系,或者管理员工和默认休息之间更复杂的多对多关系,这取决于字段 Tbl_Break.id_StandardBreak 的值是否为空与否。

    【讨论】:

      【解决方案2】:

      我会推荐一对多的方法。一旦你在数据库中获得了数据,你就可以分析它们并找出谁和谁休息了。

      另外,由于您可能有打孔卡或类似的东西来自动化整个过程,所以一对多是您想要的方式。

      【讨论】:

        猜你喜欢
        • 2011-06-06
        • 2011-04-25
        • 2011-03-31
        • 2016-01-01
        • 2012-12-31
        • 2021-06-13
        • 2015-07-28
        • 2017-05-09
        • 2017-07-31
        相关资源
        最近更新 更多