非正規化とは、データベースの最適化技術の1つで、冗長なデータを1つまたは複数のテーブルに追加します。 これにより、リレーショナル データベースでコストのかかる結合を避けることができます。 非正規化は、正規化を行わないという意味ではないことに注意してください。 これは、正規化を行った後に適用される最適化技術です。
従来の正規化されたデータベースでは、データを別々の論理テーブルに格納し、冗長なデータを最小限に抑えようとします。 また、データベース内の各データのコピーを1つだけにしようとすることもあります。
たとえば、正規化されたデータベースでは、「Courses」テーブルと「Teachers」テーブルがあるとします。 Courses の各エントリには、コースの teacherID が格納されていますが、teacherName は格納されていません。 先生の名前を持つすべてのコースのリストを取得する必要がある場合、これらの2つのテーブル間で結合を行います。
ある意味では、これは素晴らしいことで、教師が名前を変更した場合、1つの場所で名前を更新するだけで済みます。
欠点は、テーブルが大きい場合、テーブルの結合を行うのに不必要に長い時間を費やす可能性があることです。
Denormalization(非正規化)では、別の妥協点を見つけます。 非正規化では、少ない結合数で効率的なメリットを得るためには、多少の冗長性やデータベースの更新にかかる余分な労力があっても構わないと判断します。
非正規化の利点:-
- 結合の数が少ないので、データの取得が速くなります
- より少ないテーブルを参照する必要があるので、データを取得するクエリはよりシンプルになります (したがって、バグが発生する可能性も低くなります)。
非正規化の短所:-
- 更新や挿入のコストが高くなる
- 非正規化によって、更新や挿入のコードを書くのが難しくなる
- データが不整合になる可能性がある。
- データの冗長性は、より多くのストレージを必要とします。
大手ハイテク企業のようにスケーラビリティが要求されるシステムでは、ほとんどの場合、正規化されたデータベースと非正規化されたデータベースの両方の要素を使います。