【问题标题】: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】:
我会推荐一对多的方法。一旦你在数据库中获得了数据,你就可以分析它们并找出谁和谁休息了。
另外,由于您可能有打孔卡或类似的东西来自动化整个过程,所以一对多是您想要的方式。