正規化を行わない理由

正規化は、よい設計指針なんですが、あえて正規化をおこなわない、あるいは、非正規化の方向にテーブルを変更することがあります。正規化を行わない理由には以下のものがあります。

  • 正しい履歴を残したい場合

上の例では、単価は、商品購入時の単価である必要があります。後で価格改正した場合、価格が昔の購入データにまで反映されるとおかしなことになります(価格は商品コードを買える場合も多いだろうで、消費税などを例に考えた方が現実的かも)。

  • パフォーマンス

マスタテーブルと同じカラムや導出項目を定義しておくことで、ジョインや計算の処理を省き高速化させます

  • 元の情報が失われる

第3正規化までは、情報無損失分解といって、テーブルのジョインで、必ず分解前のビューを復元することができます。これ以降のボイスコット正規化などでは、元の情報が失われることがあるので、そのため、第3正規化まででとどめたりもするらしい。



その他にもいくつかあるかもしれません。。。