【问题标题】:MySQL Database Structure For Employee Timeclock员工时钟的 MySQL 数据库结构
【发布时间】:2012-11-12 16:48:45
【问题描述】:

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

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?

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

丰富

【问题讨论】:

    标签: mysql datetime unix-timestamp


    【解决方案1】:

    我会选择 两个 表:

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

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

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


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

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

    相关

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多