0

タイムシートの適用に取り組んでおり、正規化について質問があります。

オプション I で 3 つのテーブルをリンクしましたが、オプション II ではグループ テーブルとサブグループ テーブルがなく、アクティビティ テーブルが 1 つだけあります。

次のレイアウトに従って、どちらのオプションが優れているかを知りたいです。

ここに画像の説明を入力

ここに画像の説明を入力

追加 - 新しいオプション

ここに画像の説明を入力

4

2 に答える 2

2

GROUP1 つのテーブルと 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 を挿入するだけです。

また、これにより、必要に応じて、グループ ツリーの任意の場所にアクティビティを含めることができます。

于 2012-07-03T18:50:25.147 に答える
1

確かに、サブグループにグループを参照させる方がよいでしょうか?次に、アクティビティはサブグループを参照するだけですか?

于 2012-07-03T17:20:39.997 に答える