SQL和规范化

时间:2013-08-09 09:36:54

标签: sql database-design normalization

这是一个设计决定,我真的想要一些建议。我正在尝试录制 员工休息时间。此外,员工可以在任何一天中休息多次。我应该采用什么策略?

我的想法最初是一名员工可能会休息多次,一次性休息将由一名员工完成。一对多。

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

我们倾向于分裂头发虽然我倾向于选择一对多。例如约翰在晚上12点半休息时说,弗雷德在晚上12点离开,他们都在不同的时间段返回,下午1点05分和下午1点30分说。

您能为这种情况提供一些良好的数据库设计实践吗?下图中的想法:

many to many one to many

2 个答案:

答案 0 :(得分:0)

去寻找一对多。绝对

您可以添加“标准休息”​​表,在这里您可以存储午餐休息时间的标准值,例如“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的值是否为null或不。

答案 1 :(得分:0)

我会重新尝试一对多的做法。一旦你有了数据库中的数据,你就可以分析它们并找出谁与谁一起休息。

此外,既然你可能有电子贺卡或类似的东西来自动完成整个过程,那么一对多就是你想要的方式。