従業員用のマスターと詳細のテーブルを用意してもよいかどうか疑問に思っています。
要件に応じて、国別の部門別、およびレポート レベルの従業員コード別にデータをフィルタリングできます。
従業員の部門または国コードが変更された場合、変更は詳細テーブルに反映され、古いレコードは IS_ACTIVE = 'T' に設定されます。
---------------------マスターテーブル---------------------- -----------
**EMPLOYEE_CODE** VARCHAR2(20 BYTE) NOT NULL,
EMAIL VARCHAR2(100 BYTE)
FIRST_NAME VARCHAR2(50 BYTE)
LAST_NAME VARCHAR2(50 BYTE)
WORKING_HOURS NUMBER
----------------------詳細表--------------------------- -----------
**PK_USER_DETAIL_ID** NUMBER,
FK_EMPLOYEE_CODE VARCHAR2(20 BYTE),
FK_GROUP NUMBER,
FK_DEPARTMENT_CODE NUMBER,
FK_EMPLOYER_COUNTRY_CODE VARCHAR2(5 BYTE),
FK_MANAGER_ID VARCHAR2(20 BYTE),
FK_ROLE_CODE VARCHAR2(6 BYTE),
START_DATE DATE,
END_DATE DATE,
IS_ACTIVE VARCHAR2(1 BYTE),
INACTIVE_DATE DATE
従業員テーブルはタイムシート テーブルとリンクされ、タイムシート レポートのデータは、部門、国、および従業員コードによってフィルター処理できます。
オプション:私
- 1 つの主キーを持つ 1 つの従業員テーブルを用意し、従業員の部門または役割が更新されるたびに新しいエントリを作成します。
- タイムシート テーブルに国と部門コードを追加します。
--> この方法では、employee テーブルを検索する必要はありません。
オプション:Ⅱ
- マスターテーブルとディテールテーブルがあります。
- タイムシート テーブルに国と部門コードを追加します。
--> この方法では、従業員テーブルを検索する必要はありません。さらに、マスター詳細テーブルがあります。
オプション : NEW
- マスターテーブルとディテールテーブルがあります。
- タイムシート テーブルには EmpCode が含まれます。
- ユーザーが新しい場所に移動したり、部門を変更した場合は、新しい部門コードと同じ従業員番号を使用して、詳細テーブルに新しい行を挿入します。
- 古い行を更新し、終了日フィールドを設定して、場所または部門が変わった場合に終了日フィールドを更新する必要があるようにします。
どちらが最適なオプションで、他に利用できるより良いオプションはありますか?