Eric Petroelje&mdmaからの借用:
Employee
- EmployeeID (PK)
- EmployeeName
- Other_fields
Project
- ProjectID (PK)
- ProjectName
- Other_fields
WorkSegment
- WorkSegmentID (PK)
- ProjectID (IX1)
- EmployeeID (IX2)
- Date (IX1, IX2)
- StartTime
- EndTime
- PayrollCycleID (FK)
WorkSegmentの最初のインデックスはProjectID、Dateです。WorkSegmentの2番目のインデックスは、EmployeeID、Dateです。これらのインデックスは一意ではありません。これは、人が1日に複数回プロジェクトに取り組むことができるようにするためです。インデックスを使用すると、プロジェクトまたは個人の作業時間に関するレポートを作成できます。
各WorkSegment行は、1セグメントの時間、1日、1つのプロジェクト用です。各従業員には、給与サイクルを説明するために必要な数のWorkSegment行があります。
TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
ProjectID、EmployeeID、およびPayrollCycleIDには一意のインデックスがあります。従業員が給与サイクル中に作業するプロジェクトごとに1つのTimeSheetSegment行があります。
TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
TimeSheet行は、TimeSheetSegment行とWorkSegment行を1つにまとめます。EmployeeID、PayrollCycleIDインデックスは一意です。
Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp
タイムシートが送信されると、承認行が作成されます。これらのフィールドは、TimeSheetテーブルの一部である可能性があります。ApprovalテーブルにはTimeSheetテーブルとは異なるデータベースアクセス許可がある可能性が高いため、4次正規化でそれらを分割しました。
PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields
PayrollCycleテーブルは、いくつかの日付フィールドを正規化し、WorkSegment行とTimeSheetSegment行をまとめて一貫性のあるタイムシートを作成するのを容易にする整数キーを提供します。