データベースの正規化、非正規化

こんにちはGMOアドマーケティングのy.yです。

データベース設計において正規化と非正規化はどちらも
データの整合性とパフォーマンスに大きく影響を与える重要な要素です。

今回はその正規化、非正規化について書きたいと思います。

データベースの正規化とは

レコードの整合性と管理をしやすくするための手法です。
正規化には、第1正規化、第2正規化、第3正規化等があり、不要な重複を排除することで整合性を確保することができます。

正規化を行うことで、整合性を高めることができますが正規化をしすぎるとテーブルの数が多くなりすぎ管理が難しくなる場合があります。

適切な正規化を行い、整合性を確保することが大切になります。


データベースの正規化はどういった時に?

重複レコードが多い場合

テーブルに同じレコードが複数登録されている場合、重複を排除するために正規化を行います。
重複レコードがあると整合性が損なわれ、更新する際に矛盾が生じる可能性があります。

テーブルの容量が大きい場合

テーブルに多くのカラムがある場合、正規化を行うことで複数の小さなテーブルに分割することができます。
これにより、検索や更新にかかる時間が短縮されパフォーマンスが向上します。

テーブルに異なる種別のレコードが含まれている場合

テーブルに異なる種別のレコードが含まれている場合、正規化を行うことで、テーブルを分割し、レコードの整合性を確保することができます。
例えば、顧客情報、注文情報、決済情報等が混在している場合、顧客、注文、決済テーブルを分割することで、整合性を高めることができます。  

データベースの非正規化とは

データベースの正規化は整合性を保つための手法ですが、正規化をしすぎるとパフォーマンス低下の原因となることがあります。
そういった時に、データベースの非正規化が必要になる場合があります。  

データベースの非正規化はどういった時に?

パフォーマンスに問題がある場合

正規化されたデータベースでは、レコードを取得するために複数のテーブルを結合する必要があります。
結合することにより、データの取得に時間がかかる場合があります。
この場合、必要なレコードを1つのテーブルにまとめることで、パフォーマンスを改善することができます。  

アプリケーションコードのシンプル化が必要な場合

正規化によって複数のテーブルに分割されたレコードは、結合する必要があります。
複雑な結合はSQLやアプリケーションのコードが複雑になり、そういったコードをシンプル化する必要がある場合です。  

レコードの量が少ない場合

正規化は整合性を保つための手法のため、レコードが大量にある場合には有効ですがレコードが少ない場合には非効率的になることがあります。
その場合、非正規化することでパフォーマンスを向上させることができます。  

レコードの追加や変更が少ない場合

正規化によって複数のテーブルに分割されたレコードは、追加や更新が発生するたびに複数のテーブルを更新する必要がありますが、追加や更新が少ない場合は非正規化することでパフォーマンスを向上させることができます。

他にも正規化、非正規化のメリットデメリットはありますが今回のブログでは以上となります。