2009-07-25 4 views
0

私はMySQL DBを使用するスケジュールアプリに取り組んでいます。このサイトのモジュールの1つは、マネージャーが遅滞、残業、欠席を追跡することです。現在のサイトは混乱しています。それは単にマネージャがキーデータを入力するだけですが、(従業員が到着/退室すると思われるときのような)既知のデータにマネージャをバインドしたり、標準フォーマットを使用するように要求することさえありません。何人かのマネージャーは30分(遅くて30分を意味する)を入力しますが、他の人は8:30(8:00に期日が到来することを意味します)などと入力します。データベース設計 - この日付の値を示すNULLまたは最大値?

私のバージョンははるかに制限されます。マネージャーは従業員を選択し、問題のシフトを選択します。基本的には、実際に到着した時間、実際に残った時間の2つの値を入力できます。このようにして、レポートが実行され、タイムシートが確認されたときには、単純に遅れているか早いか残業しているかを見るための数学の問題です。しかし、私は厳しい状況に陥ってしまった:

最初に、誰かが病気にかかっている(または表示されない)場合、私はそれを持っているので、マネージャーはそのボックスをチェックし、いつでも調整を行うことができます。それはその時を全面的に黒くするだけです。私はこれを両方の時間値をNULLに設定することで、クエリが実行されると、NULLは必要に応じて処理されます(おそらく、時間が左右にゼロになるように左と時間が逆になります)。両方の時間が到着し、両方の時間が「予想されるシフト終了」時間に設定されているので、ゼロになるようにしますか?

データを利用できないように感じるため、NULLを使用するのは好きではありませんが、実際に到着したかのように見えるため、予想されるシフト終了を使用していませんまた離れる。

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

答えて

0

従業員の識別子を含む別のテーブル(ShiftTimes?シフトの識別子(場合によっては3番目のシフトでは機能しない日付)、および入力および終了時刻。この方法で従業員が呼び出す場合は、その日のテーブルにはレコードが存在しません。

+0

私が正しく理解していれば、これはうまくいきます。私はTable1を持っています。それは従業員が仕事をしなければならないときのテーブルです。私はTable2を持っています。 table2がtable1がオフのときのレコードではなく、時間や遅刻などにかかわらず、EVERYONEが働いたときのテーブルです。あなたが欠席していれば、それは表2には現れません。それはうまくいくかもしれません...しかし、それは少しかさばるかもしれません。確かに良いアイデア。 – Anthony

+0

これは私の答えとして設定しています。なぜなら、私の目標が自分の目標に最もよく合うと思うからです。しかし全体的には、NULLが最も適切だということです。私の元の質問によれば、それはおそらく "正しい答え"でしょう。しかし、これは私にとって最も適切です。 – Anthony

0

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

また、数値なので、データに特別な処理を行う必要はありません。私の意見では、データ収集の最終目標であるべきだと思います。すべてを統一し、後でそれをテストする。この人が来ていないことを誰かに知らせるには、時間が0に等しいレコードをチェックしてください。

+0

問題は、私がそれを数値で見ると、状況が非常に限定的であることが必要であるということです。彼らが早く到着した場合、到着した時間は負の数であり、遅れて到着した場合は正の数です。彼らが早期に退くならば、それは否定的です、そして、彼らはどの列を考慮に入れなければなりません。それをタイムスタンプにすることで、「いつあなたが実際に出てきたか、実際に出たのはいつですか?」という状況全体が単純化され、データは「あなたが遅かった」という反省的ではなく事実。 – Anthony

+0

ああ、私はあなたが費やした時間の合計を保管していると思った。その場合、レコードを探します。 "どこで' Time_Started' - 'Time_Ended' = 0"私はそれが有効なクエリだと信じています。 –

+0

しかし、私はしばらくそれを考えていました。代わりに数字を使う考えです。他の問題は、あなたの提案に基づいて、私は実際には0であるとは言えません。なぜなら、「分かったのはどれくらいでしたか」ではなく、「遅い/早かった」ということです。それでも同じ問題が発生します。彼らは90分遅れて1時間半シフトしていなかったが、彼らはなくなった。 – Anthony

1

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

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

0

私はそれらをヌルに設定し、フラグフィールドが追加されたかどうかを指定するフラグフィールドを追加します。

1

データが実際には利用できないため(つまり、報告されるシフト開始/終了時間がないため)、NULLを挿入します。

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

0

私は、それらが欠落しているかどうかを追跡するために別の列を追加する必要があることに同意します。開始時間と終了時間をそこに残すかどうかは、実際には関係ありません。単にIsAbsentフラグを直接探すことができます。

正直、それは本当にあなたがそれを作りたいと思う方法に依存します。私は似たようなシステムを作ってきました。このような状況で私たちがやることは、一緒に欠席を記録し、それが許されているかどうかを別々に記録することです。理想的には、病気であるか、まったく表示されない以外の多くの理由があります。

不在(つまり、休暇)が支払われた場合はどうなりますか?あなたのビジネスルールは、私が推測する決定を推進します。

最終決定を下す前に、考えられるすべてのシナリオを考えてみてください。結局のところ、この状況では開始時刻と終了時刻が不自然になることがあります。

+0

私は別の列にする場合、私はまだ日付の列に何かを配置する必要があります。私はNULLを置くことができますが、なぜそれがイライラしているのかという理由の一部は、余分な列(または単に欠席のための別のテーブル)を追加すると、クエリがより複雑になります。私はちょうど並べ替えのデータが状況を反映するデザインを考えて、1つの簡単なクエリですべてを処理できるようにしました。すべてのことを言っていると、私はパンチイン/パンチアウトシステムで行くのが最善の方法かもしれないと思う。欠席が全く記録されていないため、単純な参加をしていると、パンチインしなかった部分がキャッチされます。 – Anthony

+0

ああ、そして、休暇中の場合はスケジュール通りではありません。スケジュールされたシフトを逃すことはありません。これは私が「実績」と呼ばれるものを作成する方法です。これは予定時間と実際の勤務時間のレポートです。しかし、あなたの提案のように、もう少し複雑です。たとえば、私の上司が今週のスケジュールを変更して火曜日に働いていたのですが、変更をアップロードしたり、私に知らせたりするのを忘れていました。何らかの理由で誰も私を怒鳴りませんでした。だから、彼らはそれを私のせいだとは考えていませんが、私は支払いを受けるべきではありません。しかし、 "逃した仕事"のチケットは一般的にぼやけています。 – Anthony

+0

が、このシステムはそのような状況を考慮する必要があります。私の計画は、管理者が遅れ/残業/欠席を記録し、メモを入れて「病気」、「遅刻」などのタイプを選択するという形をとることです。しかし、私たちが議論しているメインテーブルは実際のデータをキャプチャするだけで、ノートは「ノート」テーブルに追加されます。そのようにして、例えば、誰かが病気に遭って、真夜中に現れた場合、進行中の記録があります。実際には、3時間遅れて到着したことを示すだけで、メモには2つのエントリが表示されます.1つは病気、1つは「更新」です。 – Anthony

関連する問題