タイムシートの適用に取り組んでおり、正規化について質問があります。
オプション I で 3 つのテーブルをリンクしましたが、オプション II ではグループ テーブルとサブグループ テーブルがなく、アクティビティ テーブルが 1 つだけあります。
次のレイアウトに従って、どちらのオプションが優れているかを知りたいです。
追加 - 新しいオプション
タイムシートの適用に取り組んでおり、正規化について質問があります。
オプション I で 3 つのテーブルをリンクしましたが、オプション II ではグループ テーブルとサブグループ テーブルがなく、アクティビティ テーブルが 1 つだけあります。
次のレイアウトに従って、どちらのオプションが優れているかを知りたいです。
追加 - 新しいオプション
GROUP
1 つのテーブルと 1つのテーブルを使用するソリューションを使用しACTIVITY
ます。
GROUP_ID (PK) PARENT_GROUP_ID (FK) CODE NAME
--------------- ---------------------- ------------- ------------
1 (null) 4 IT ACTIVITIES
2 (null) 5 ADMINISTRATION
3 (null) 6 FINANCE
4 (null) 7 HR
5 1 4.1 IT ADMIN
6 1 4.2 IT NETWORK
7 2 5.1 MEETING
ACTIVITY_ID (PK) GROUP_ID (FK) CODE NAME
------------------ -------------- -------- -----------
1 5 4.1.1 IT PROC
2 5 4.1.2 HELPDESK
3 6 4.2.1 TECHNICAL SUPPORT
(etc)
各テーブルは、主キーに整数の代理キー (実行番号) を使用するため、グループまたはアクティビティのコードを変更する必要がある場合でも、参照整合性が損なわれることはありません。列の外部キーはPARENT_GROUP_ID
、同じテーブルと列を参照していますGROUP_ID
。
このようなセットアップを使用すると、必要になった場合にグループ階層にレベルを追加することが比較的簡単になります (そして、マネージャーは常により詳細なレポートを必要とします :-) )。多くのグループ コードとアクティビティ コードを更新する必要があるかもしれないので、比較的簡単だと言います。ただし、特定のアクティビティを参照するすべてのタイムシートを (たとえば) 変更する必要はありません。これは、整数の代理キーを参照するためです。
兄弟ノードの導入についても同様です。たとえば、4.2 と 4.3 の間にサブグループを挿入する必要がある場合、それほど難しくありません。現在の4.3 グループのコードを 4.4 に更新し、新しいグループにコード 4.3 を挿入するだけです。
また、これにより、必要に応じて、グループ ツリーの任意の場所にアクティビティを含めることができます。
確かに、サブグループにグループを参照させる方がよいでしょうか?次に、アクティビティはサブグループを参照するだけですか?