我正在开发一款部分属于员工时钟的应用。这不是太复杂,但我想确保我第一次朝正确的方向前进。我目前有这个表结构:
id - int
employee_id - int (fk)
timestamp - mysql timestamp
event_code - int (1 for clock in, 0 for clock out)
如果他们的最后一次活动是“时钟进入”,我已经完成了所有工作,他们只看到“时钟输出”按钮,反之亦然。
我的问题是,我们需要运行一份报告,显示员工一个月内工作的小时数以及当前会计年度的总小时数(自当年6月1日起)。
似乎我可以在同一记录中存储时钟,甚至可以计算两个事件之间的工作时间,并将其存储在名为“工作”的列中。然后我只需要得到该员工所有列的总和就知道总共有多少时间。
我应该保留我所拥有的结构,每对时钟进出事件移动到一行,还是有更好的方式让我完全失踪?
我知道人为错误对于时钟来说也是一个大问题,因为人们常常忘记输入或输出,我不确定哪种结构可以更容易处理。
MySQL时间戳是一个不错的选择,还是应该使用UNIX时间戳?
感谢您的任何建议/指示。
富
答案 0 :(得分:2)
我会选择两个表:
一张表应该是发生事件的简单记录,就像您现有的设计一样。
第二个表格包含计算的工作时间。有登录和退出时间的列,也许还有第三列,它们之间的时差预先计算。
关键是,正如您所提到的,计算员工工作的小时数很复杂。员工可能会抱怨他们的工作时间比您的计划报告长。在这种情况下,您希望能够访问所有事件的原始日志而不会丢失信息,以便您可以查看和调试发生的事件。但是这种原始格式很慢并且难以在SQL中使用,因此出于报告目的,您还需要第二个表,以便您可以快速生成包含每周,每月或每年总和的报告。
MySQL时间戳是一个不错的选择,还是应该使用UNIX时间戳?
时间戳很好,因为有很多MySQL函数可以很好地处理时间戳。您可能还需要考虑使用与datetime
非常相似的timestamp
。
相关强>