0

だから私はMySQLDBを使用するスケジュールアプリに取り組んでいます。このサイトのモジュールの1つは、マネージャーが遅刻、残業、欠勤を追跡するためのものです。現在のサイトはめちゃくちゃです。マネージャーにキーデータを入力させるだけですが、マネージャーを既知のデータ(従業員が到着/退去する予定の場合など)にバインドしたり、標準形式を使用するように要求したりすることはありません。30分(30分遅れ)と入力するマネージャーもいれば、8:30(8:00に予定されている)と入力するマネージャーもいます。

私のバージョンははるかに制限されます。マネージャーは従業員を選択し、次に問題のシフトを選択します。基本的に、実際に到着した時間と実際に残った時間の2つの値を入力できます。このように、レポートが実行され、タイムシートが検証されるとき、それは単にそれらが遅い/早い/残業であるかどうかを確認するために計算を行うことの問題です。しかし、私は困難な場所に遭遇しました:

まず、誰かが病気で電話をかけた場合(または単に表示されない場合)、私はそれを持っているので、マネージャーはそのチェックボックスをオンにするだけで、時間の調整はまったく行われません。その時は完全に真っ暗になります。両方の時間値をNULLに設定してこれを行う必要があり、クエリが実行されると、必要に応じてNULLが処理されます(おそらく、残り時間が逆になり、時間が到着して両端がゼロになる)、または到着時間と残り時間の両方が「予想されるシフト終了」時間に設定されているので、ゼロになりますか?

利用可能なデータがないように感じるのでNULLを使用するのは好きではありませんが、期待されるシフトエンドを使用するのは好きではありません。

これは、データを過度に複雑にする(NULLを使用する)ことなく、データをセマンティックにする方法の問題です。

4

6 に答える 6

1

この場合、NULLはデータがないという現実を表すため、適切です。従業員はそこにいませんでした。他に何を置くことができますか?

ただし、nullを探すのではなく、これを示す何らかのステータスをレコードに添付する必要があります(imho)。

于 2009-07-25T00:15:02.707 に答える
1

実際に利用可能なデータがないため(つまり、報告されるシフトの開始/終了時刻がないため)、NULLを設定します。

レポートでは、これらのNULL値をスキップして、別の処理を実行できます。たとえば、NULL行をカウントすることで、従業員が見逃したシフトの数をカウントできるようになりました。

于 2009-07-25T00:15:29.397 に答える
0

誰かが来ない場合は、0分としてマークするのが最も理にかなっていると思います。彼らはそのシフトで0分間入ったからです。

また、数値であるため、データに特別なことをする必要はありません。私の意見では、これがデータ収集の最終目標になるはずです。すべてを均一にし、後でテストします。この人が入ってこなかったことを誰かに警告したい場合は、時間が0に等しいレコードを確認してください。

于 2009-07-25T00:10:49.480 に答える
0

従業員の識別子、シフトの識別子(おそらく日付ですが、3番目のシフトでは機能しません)、および開始時刻と終了時刻を含む別のテーブル(ShiftTimes?)を作成するのはどうですか。このように、従業員がそこに電話をかけた場合、その日のテーブルにはレコードがありません。

于 2009-07-25T00:13:09.647 に答える
0

両方をnullに設定し、表示されるかどうかを指定するフラグフィールドを追加します。

于 2009-07-25T00:15:09.477 に答える
0

存在しないかどうかを追跡するために、別の列を追加する必要があることに同意します。次に、開始時刻と終了時刻をそこに残すかどうかは実際には問題ではありません。IsAbsentフラグを直接探すだけです。

正直なところ、それは本当にあなたがそれを作りたいかどうかに依存します。私は同様のシステムを実行しましたが、このような状況で行うことは、不在をログに記録し、それが免除されたかどうかを判断するための個別のレコードをまとめて持つことです。理想的には、病気であるか、単に現れないこと以外に多くの他の理由があるからです。

欠席が免除され(休暇など)、支払いを受ける必要がある場合はどうなりますか?あなたのビジネスルールは私が推測するそれらの決定を推進するでしょう。

最終的な決定を下す前に、考えられるすべてのシナリオを考えてみてください。結局のところ、この状況では開始時間と終了時間が不遜になることに気付くかもしれません。

于 2009-07-25T00:45:41.793 に答える