このテーブルを正規化するにはどうすればよいですか:
Frequency (PK) Year (PK) Quarter (PK) Month (PK) Value
Monthly 2013 1 1 1
Quarterly 2013 1 0 2
Yearly 2013 0 0 3
Frequency = Yearly の場合、値は主キーのサブセット (Frequency、Year) に依存するため、表は第 2 正規形ではありません。
代理キーを追加することを考えました。次に、Quarter 列と Month 列を NULL 可能にすることができます。
Surrogate (PK) Frequency Year Quarter Month Value
1 Monthly 2013 1 1 1
2 Quarterly 2013 1 NULL 2
3 Yearly 2013 NULL NULL 3
しかし、これでは問題は解決しません。なぜなら、第 2 正規形の定義は候補キーにも適用されるからです。頻度に基づいてテーブルを 3 つのテーブルに分割することは、お勧めできません。ビジネス ロジックに if ステートメントが導入されるからです。
if (frequency == Monthly) then select from DataMonthly