4

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

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 Timestamp?

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

富有的

4

1 回答 1

2

我会选择两张桌子:

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

  2. 第二个表包含计算的工作时间。有用于登录和注销时间的列,也许还有第三列,其中预先计算了它们之间的时间差。

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


MySQL Timestamp 是一个不错的选择还是我应该使用 UNIX Timestamp?

时间戳很好,因为有很多 MySQL 函数可以很好地使用时间戳。您可能还想考虑使用datetimetimestamp.

有关的

于 2012-11-24T18:10:26.533 回答