2012-11-24 52 views
4

我正在开发一个部分为员工时钟的应用程序。这不是太复杂,但我想确保我第一次在正确的方向前进。目前,我有这个表的结构:员工MySQL数据库结构时钟

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

我就拥有了一切工作的地方,如果他们的最后一个事件是“时钟”,他们只看到了“时钟输出”按钮,反之亦然。

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

好像我可以在同一条记录中存储时钟,甚至可以计算两个事件之间的分钟数并将其存储在名为“工作”的列中。然后,我只需要获得该员工所有专栏的总和,即可知道总计多少时间。

我是否应该保留我的结构,每对时钟的进出事件都移动到一行上,还是有更好的方式,我完全错过了?

我知道人为错误也是时钟的大问题,因为人们经常忘记进入或退出,我不确定哪个结构可以轻松处理。

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

感谢您的任何建议/方向。

丰富

回答

2

我会去与表:

  1. 一张桌子应该是简单的日志的事件发生了什么,就像你现有的设计。

  2. 第二张表包含计算的工作时间。有登录和退出时间的列,也可能是第三列,预先计算它们之间的时间差。

问题是,如你所说,计算员工工作多少小时是复杂的。员工可能会抱怨他们的工作时间比您的计划报告长。在这种情况下,您想要访问所有事件的原始日志而不会丢失信息,以便您可以查看和调试发生的事情。但是这种原始格式很慢并且很难在SQL中使用,所以为了报告目的,您还需要第二个表,以便您可以快速生成包含每周,每月或每年总计的报告。


是MySQL的时间戳一个很好的选择,或者我应该使用UNIX时间戳?

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

相关