正規化は、冗長性を最小化または排除することによってディスクスペースの浪費を防ぎます。
比較表
比較基準 | 正規化 | 非正規化 |
---|---|---|
基本 | 正規化は、非冗長で一貫性のあるデータを格納するためのセットスキーマを作成するプロセスです。 | 非正規化は、データを迅速に照会できるようにデータを結合するプロセスです。 |
目的 | データの冗長性と矛盾を減らす。 | 冗長性を導入することによってクエリのより速い実行を達成するため。 |
で使われる | OLTPシステムでは、挿入、削除、および更新の異常をより迅速にし、品質データを保管することに重点が置かれています。 | OLAPシステム。検索と分析をより高速にすることに重点が置かれています。 |
データの整合性 | 維持された | 保持できない |
冗長性 | 削除済み | 追加しました |
テーブル数 | 増加 | 減少 |
ディスクスペース | 最適化された使い方 | 浪費 |
正規化の定義
正規化は、データベース内のデータを効率的に配置する方法です。 それはテーブルを構築し、いくつかの特定の規則に従ってそれらのテーブル間の関係を設定することを含みます。 冗長性と矛盾する依存関係は、より柔軟にするためにこれらの規則を使用して削除できます。
冗長なデータはディスクスペースを浪費し、データの不整合を増やし、DMLクエリを遅くします。 同じデータが複数の場所に存在し、そのデータに対して更新がコミットされている場合は、その変更をすべての場所に反映させる必要があります。 矛盾するデータは、それへのパスを失うことによってデータ検索とアクセスを難しくする可能性があります。
冗長性の回避、異常の更新、不要なコーディング、データを変更をより簡単かつ正確に収容できる形式に保つこと、およびデータ制約を強制することなど、正規化を実行する理由はさまざまです。
正規化には、属性間の機能的依存関係の分析が含まれます。 関係(表)は、構造を持つ関係を生成するために異常で分解されます。 どの属性をリレーションにまとめるべきかを決めるのに役立ちます。
正規化は基本的に正規形の概念に基づいています。 リレーションテーブルは、特定の一連の制約を満たす場合、通常の形式であると言われます。 1NF、2NF、3NF、BCNF、4NF、5NFの6つの定義済み正規形があります。 正規化によって冗長性が排除されるはずですが、整合性が犠牲になることはありません。
非正規化の定義
非正規化は正規化の逆のプロセスです。正規化スキーマは、冗長な情報を持つスキーマに変換されます。 冗長性を使用し、冗長データの一貫性を保つことでパフォーマンスが向上します。 非正規化を実行する理由は、過度に正規化された構造によってクエリプロセッサで発生するオーバーヘッドです。
非正規化は、上位正規形関係の結合を基本正規形として格納する方法として定義することもできます。これは、下位正規形です。 結合数が多いとプロセスが遅くなる可能性があるため、テーブル数が減り、複雑なテーブル結合が発生します。 派生可能な値の格納、テーブルの事前結合、ハードコードされた値の作成、詳細のマスタへの保存など、さまざまな非正規化手法があります。
ここで、非正規化アプローチは、すべてのデータを1か所に配置することによって、このデータを収集するためにこれらの複数のファイルを検索する必要性を排除できるという概念を強調しています。 基本的な戦略は非正規化であり、最も支配的なプロセスは最終的にパフォーマンスを向上させるような変更を調べるために選択されます。 そして最も基本的な変更は、結合数を減らすために既存のテーブルに複数の属性を追加することです。
正規化と非正規化の主な違い
- 正規化は、データの冗長性と矛盾を減らし、データの整合性を達成するために、データを複数の表に分割する技法です。 一方、非正規化は、データ検索を高速化するためにデータを単一のテーブルに結合する手法です。
- 正規化はOLTPシステムで使用され、それは挿入、削除および更新の異常をより速くすることを強調します。 それとは対照的に、非正規化はOLAPシステムで使用され、検索と分析をより高速にすることを重視しています。
- 正規化プロセスではデータの整合性が維持され、非正規化ではデータの整合性が保持されにくくなります。
- 正規化を実行すると冗長データが排除され、非正規化を行うと冗長データが増加します。
- 正規化はテーブルと結合の数を増やします。 対照的に、非正規化はテーブル数と結合数を減らします。
- 同じデータが異なる場所に格納されるため、ディスクスペースは非正規化で無駄になります。 逆に、ディスク容量は正規化されたテーブルで最適化されています。
結論
正規化と非正規化は状況に応じて便利です。 より速い挿入、削除および更新の異常、ならびにデータの一貫性が必然的に必要とされる場合、正規化が用いられる。 一方、非正規化は、高速検索がより重要である場合、および読み取りパフォーマンスを最適化するために使用されます。 また、過度に正規化されたデータや複雑なテーブル結合によって発生するオーバーヘッドも軽減されます。