这里的第一个问题,所以请让我知道如何,如果下面的内容没有帮助,可以更好地提出问题。
TLDR -我应该为分配给机组人员的员工和没有分配给员工的员工单独设置员工时间表吗?
我正在尝试按照“凡人的数据库设计”一书来设计数据库,该数据库跟踪员工的时间。我正在尝试替换正在使用的每周时间表和机组人员纸张(以及机组人员的开始时间和结束时间)。对于未分配给员工的员工,还有个人员工每周时间表。另外,如果有人生病等,船员表有时也会带有星号。
项目与工作人员之间存在关系(1:N),对于未分配给工作人员的个人雇员,则分配给该项目。 员工通常按1:1分配给员工,但是当1:N时就会头痛。
因此,目前有不同类型的机组人员说A,B,C,D,E。
船员D&E仅填写每周时间表(项目,名称和时间,因此船员D和E都在同一个项目中),而每日工作表不包括时间。有时,大约有10%的时间,员工将在同一天同时参加D&E。
A,B,C将在工作日表上记录每天的时间,但是如果员工在C组中,则这些时间优先于工作表A或B(如果他们也在A或B上)的时间。
使用{employee,datetimestart,datetimeend}的明显答案将无法正常工作,因为我在乎时间是从哪里来的(船员,个人(如果是船员除外),例如生病,未分配给船员)。 >
我可以扩展为拥有{employee,乘员组类型,datetimestart,datetimeend},这并不能解决雇员都在D&E上的问题。在这种情况下,我可以放DE或F吗?
那我该如何只处理分配给项目的人员呢? 如果我有{employee,乘员组类型,projectref,datetimestart,datetimeend},则projectref是多余的,并且可以从乘员类型派生(如果不为null)。这是一种合理的方法还是有单独的表格会更好?
编辑-或者我应该有一张表{crewid,datetimestart,datetimeend}-从船员关系中得出员工的时间,并有一个单独的{employee,datetimestart,datetimeend,category }的类别说是例外(例如生病)还是未分配的个人?
答案 0 :(得分:0)
此描述中有很多复杂的规则。如果要创建一个永远不会违反这些规则的架构,则它可能是一个非常复杂的规范化架构。我建议在您的应用程序逻辑中最好地满足某些规则。
关于日期的存储方式,请记住,您始终需要满足异常情况的需要,因此仍然需要满足10%或1%或千分之一的情况发生的要求,否则您只是无法保存数据。
我倾向于设计最详细的级别,它可能是员工,员工,项目,日期,时间,并且可能还会添加一个默认为1的分配列,但如果将人员分配给一半,则分配列可能为0.5两个工作人员同时
然后,您可以编写查询,以便在将人员分配给机组人员时,默认情况下他们会获得机组人员的时间,除非他们具有一些覆盖的值或您需要的任何其他规则。
确实,这是您在嘲弄设计时将对业务用户执行的一种迭代建模。在现实世界中并不总是那么容易。
很抱歉,这里没有确定的模型,但是可能需要考虑一些技巧,这可能会一直起作用。祝你好运。