SQL数据库设计时间表员工与工作人员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL数据库设计时间表员工与工作人员相关的知识,希望对你有一定的参考价值。

这里的第一个问题,请让我知道如果下面没有帮助,如何更好地提出问题。

TLDR - 我是否应该为分配给工作人员的员工和未分配给员工的员工分隔员工时间表?

我正在尝试设计数据库,遵循追踪员工时间的“仅限于凡人的数据库设计”一书。我正在尝试更换每周的时间表和船员纸张(包括船员的开始和结束时间)。对于未分配给工作人员的人员,还有单独的员工每周时间表。如果有人生病等,船员工作表有时也会带星号。

项目与工作人员(1:N)之间存在关系,并且未分配给工作人员的个人员工被分配到项目中。员工被分配到工作人员,通常是1:1,但是当1:N时出现头痛。

'Has' Relationships

所以目前不同类型的船员说A,B,C,D,E。

船员D&E将填写每周时间表(项目,名称和时间,因此工作人员D和E都将在同一个项目中)并且每日工作表不包括时间。有时10%的员工会在同一天同时参加D&E。

A,B,C每日都会在每日工作表上显示,但如果员工在工作人员C上,这些时间会在A或B表上超过时间(如果他们也在A或B上)。

{employee,datetimestart,datetimeend}的明显答案将不起作用,因为我关心时间的来源(船员,个人,如果船员例外,例如生病,个人未分配给船员)。

我可以扩展到{employee,crewtype,datetimestart,datetimeend},当员工同时在D&E上时,这不会处理。我可以在这种情况下使用DE或F吗?

那我该如何处理那些只分配给项目的人呢?如果我有{employee,crewtype,projectref,datetimestart,datetimeend},则projectref是redudant,并且当它不为null时可以从crewtype派生。这是一种合理的方法还是让单独的表更好?

编辑 - 或者我应该有一个表{crewid,datetimestart,datetimeend} - 从船员 - 员工关系中获取员工的时间,并有一个单独的{employee,datetimestart,datetimeend,category},其类别说明是否例外(例如生病)或未指定的个人?

答案

本说明书中有许多复杂的规则。如果您想创建一个永远不会破坏这些规则的架构,那么它可能是一个非常复杂的规范化架构。我建议在您的应用程序逻辑中最好地满足一些规则。

关于你如何存储日期,请记住你总是需要满足例外情况,所以10%的时间发生的事情,或1%或千分之一仍然需要照顾,否则你只是不能保存数据。

我倾向于设计最详细的级别,可能是员工,工作人员,项目,日期,时间,并且可能还添加一个默认为1的分配列,但如果该人员分配给两个工作人员,则可以为0.5同一时间。

然后你可以编写查询,这样如果一个人被分配给一个工作人员,他们默认获得工作人员的时间,除非他们有一些被覆盖的值,或者你需要的任何其他规则。

实际上,这是您在梳理设计时对业务用户进行的迭代建模。在现实世界的场景中并不总是那么容易。

对不起,这里没有明确的模型,但也许一些提示可能会有所帮助。祝它好运。

以上是关于SQL数据库设计时间表员工与工作人员的主要内容,如果未能解决你的问题,请参考以下文章

基于JAVA的企业信息员工管理系统的设计与实现(附:源码 论文 sql文件)

研磨设计模式之——代理模式

设计这个特定的数据库/SQL 问题的最佳方法是啥?

用sql语句实现'查询各部门名称和该部门员工数'

MySQL 设计与开发规范

sql数据库的视图和 存储过程怎么建?