4

私は部分的に従業員のタイムレコーダーであるアプリに取り組んでいます。それほど複雑ではありませんが、最初は正しい方向に向かっていることを確認したいと思います。私は現在このテーブル構造を持っています:

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

私はすべてが機能しています。最後のイベントが「出勤」だった場合、「出勤」ボタンのみが表示され、その逆も同様です。

私の問題は、従業員が1か月に何時間働いたか、また今年度(今年度の6月1日以降)の合計時間を示すレポートを実行する必要があることです。

クロックインとクロックアウトを同じレコードに保存し、2つのイベント間の作業分を計算して、それを「worked」という列に保存できるようです。次に、その従業員が合計時間を知るために、そのすべての列の合計を取得する必要があります。

私が持っている構造を維持するか、クロックインおよびクロックアウトイベントのペアごとにすべてを1行に移動する必要がありますか、それとも完全に欠落しているより良い方法がありますか?

ヒューマンエラーもタイムレコーダーの大きな問題であることを私は知っています。なぜなら、人々はしばしば出勤または退勤を忘れてしまい、どの構造がそれをより簡単に処理できるかわからないからです。

MySQLタイムスタンプは良いオプションですか、それともUNIXタイムスタンプを使用する必要がありますか?

アドバイス/指示をありがとう。

リッチ

4

1 に答える 1

2

私は2つのテーブルで行きます:

  1. 1つのテーブルは、既存の設計のように、発生したイベントの単純なログである必要があります。

  2. 2番目の表には、計算された労働時間が含まれています。ログイン時間とログアウト時間の列があり、おそらくそれらの間の時間差が事前に計算された3番目の列もあります。

おっしゃるように、従業員の労働時間の計算は複雑です。従業員は、あなたのプログラムの報告よりも長時間働いたと不平を言うかもしれません。この場合、情報を失うことなくすべてのイベントの元のログにアクセスして、何が起こったかを正確に確認およびデバッグできるようにする必要があります。ただし、このraw形式は低速であり、SQLでの操作が難しいため、レポートの目的で2番目のテーブルも必要です。これにより、週次、月次、または年次の合計でレポートをすばやく生成できます。


MySQLタイムスタンプは良いオプションですか、それともUNIXタイムスタンプを使用する必要がありますか?

タイムスタンプでうまく機能するMySQL関数がたくさんあるので、タイムスタンプは良いです。datetimeに非常によく似た使用を検討することもできtimestampます。

関連している

于 2012-11-24T18:10:26.533 に答える