レベル:初心者
非常に多くの組織が、従業員のスケジュールを保存するという一般的な問題に直面しています。企業、大学、または単に個人など、どの機関でも、多くのエンティティはスケジュールを表示するためのアプリケーションを必要とします。そのため、データベースモデルを考えてから、今後の記事で、従業員のスケジュールをデータベースに保存するための簡単なアプリケーションについて説明します。
現在、デザインは次のようになっています。
モデルは非常に単純です。
ヒント–自然および代理の主要戦略
- 自然キーの値が変更される可能性がある場合、または自然キーが複雑すぎる場合は、代理主キーを使用してください。
- 自然な候補キーが少数の列(理想的には1つだけ)で構成されていて、その値が変わらない場合は、自然な主キーとして使用します
詳細b> 自然および代理の主キーについて。
employee
テーブルには、名前、名前、住所、電話番号など、各従業員を説明する基本的な属性が含まれています。名前と名前は各レコードを一意に識別しません(同じ名前と名前の人が複数いる可能性があります)。そのため、新しい列が導入されました(id
)、代理キーと呼ばれます 。
schedule
表には、各従業員が勤務している曜日と時間が含まれています。 work_date
列は、各従業員が働いていた日を指定します。 start_work_hour
およびend_work_hour
列はその日の労働時間を識別します。
Peterという従業員がいるとしましょう。彼は2月4日に仕事をしていて、スケジュールの開始時刻と終了時刻をマークしています。
schedule
テーブルは次のようになります:
id | employee_id | work_date | start_work_hour | end_work_hour | is_holiday | is_weekend |
1 | 1 | | 10 | 16 | 0 | 0 |
そのようなシステムを構築している間、私たちは誰が最も夜働いたか、誰が最も週末/休日に働いたかを知りたいかもしれません。このような情報を含むレポートを生成するには、列is_holiday
およびis_weekend
紹介されました。
このアプローチを使用すると、会社の休日の日付を含む休日用の別のテーブルが必要になります。従業員が勤務時間を入力すると、列is_holiday
およびis_weekend
トリガーを使用して更新できます。日付と時刻を挿入すると、トリガーは日付が休日か週末かを確認し、フィールドに正しい値を挿入します。