员工时钟的MySQL数据库结构

时间:2012-11-24 18:06:20

标签: mysql datetime unix-timestamp

我正在开发一款部分属于员工时钟的应用。这不是太复杂,但我想确保我第一次朝正确的方向前进。我目前有这个表结构:

id - int
employee_id - int (fk)
timestamp - mysql timestamp
event_code - int (1 for clock in, 0 for clock out)

如果他们的最后一次活动是“时钟进入”,我已经完成了所有工作,他们只看到“时钟输出”按钮,反之亦然。

我的问题是,我们需要运行一份报告,显示员工一个月内工作的小时数以及当前会计年度的总小时数(自当年6月1日起)。

似乎我可以在同一记录中存储时钟,甚至可以计算两个事件之间的工作时间,并将其存储在名为“工作”的列中。然后我只需要得到该员工所有列的总和就知道总共有多少时间。

我应该保留我所拥有的结构,每对时钟进出事件移动到一行,还是有更好的方式让我完全失踪?

我知道人为错误对于时钟来说也是一个大问题,因为人们常常忘记输入或输出,我不确定哪种结构可以更容易处理。

MySQL时间戳是一个不错的选择,还是应该使用UNIX时间戳?

感谢您的任何建议/指示。

1 个答案:

答案 0 :(得分:2)

我会选择两个表:

  1. 一张表应该是发生事件的简单记录,就像您现有的设计一样。

  2. 第二个表格包含计算的工作时间。有登录和退出时间的列,也许还有第三列,它们之间的时差预先计算。

  3. 关键是,正如您所提到的,计算员工工作的小时数很复杂。员工可能会抱怨他们的工作时间比您的计划报告长。在这种情况下,您希望能够访问所有事件的原始日志而不会丢失信息,以便您可以查看和调试发生的事件。但是这种原始格式很慢并且难以在SQL中使用,因此出于报告目的,您还需要第二个表,以便您可以快速生成包含每周,每月或每年总和的报告。


      

    MySQL时间戳是一个不错的选择,还是应该使用UNIX时间戳?

    时间戳很好,因为有很多MySQL函数可以很好地处理时间戳。您可能还需要考虑使用与datetime非常相似的timestamp

    相关