正規化を行わない理由
正規化は、よい設計指針なんですが、あえて正規化をおこなわない、あるいは、非正規化の方向にテーブルを変更することがあります。正規化を行わない理由には以下のものがあります。
- 正しい履歴を残したい場合
上の例では、単価は、商品購入時の単価である必要があります。後で価格改正した場合、価格が昔の購入データにまで反映されるとおかしなことになります(価格は商品コードを買える場合も多いだろうで、消費税などを例に考えた方が現実的かも)。
- パフォーマンス
マスタテーブルと同じカラムや導出項目を定義しておくことで、ジョインや計算の処理を省き高速化させます
- 元の情報が失われる
第3正規化までは、情報無損失分解といって、テーブルのジョインで、必ず分解前のビューを復元することができます。これ以降のボイスコット正規化などでは、元の情報が失われることがあるので、そのため、第3正規化まででとどめたりもするらしい。
その他にもいくつかあるかもしれません。。。