データベース正規化は、データベース設計で使用される、データを効率的に整理するためのプロセスです。データの冗長性(重複データ)を減らし、データの完全性(データの精度と一貫性)を向上させるのに役立ちます。これは、散らかったファイル キャビネットを整理するようなものです。同じ情報を複数の場所に置くのではなく、各情報を 1 か所に置き、相互参照システムを使用してそれらを接続します。
データベースとは、通常はコンピュータ システムに電子的に保存される、整理されたデータの集合体です。デジタル ファイル キャビネットのようなものです。紙のフォルダや引き出しの代わりに、構造化されたテーブル(またはその他のデータ整理方法)を使用して、情報を迅速かつ効率的に保存、管理、取得できます。
現代の企業は、顧客の注文や在庫レベルから、ユーザー アカウントの詳細や金融取引まで、あらゆるものを追跡するためにデータベースを使用しています。そして多くの企業がデータベースをクラウドで実行することを選択しています。
リレーショナル データベースは、データを列と行で構成された 1 つ以上のテーブルに整理します。これらのテーブル間に特定の事前定義された関係が確立されるため、「リレーショナル」と呼ばれます。その中心となる考え方は、複雑な情報を管理しやすい小さな単位に分割し、同じ情報を複数回保存する必要性を回避することです。
オンライン ストアのシンプルなデータベースについて考えてみましょう。顧客テーブル(名前、住所、電話番号)と注文テーブル(日付、合計)があるとします。顧客が注文したときに、顧客の住所全体を注文テーブルにコピーする必要はありません。一意の顧客 ID を使用して、その注文をその顧客の詳細情報に接続するだけです。
顧客が引っ越して住所が変わった場合、1 か所、つまり顧客テーブルで住所を更新するだけで済みます。住所を 100 件の注文レコードにコピーした場合、その 100 件すべてを更新しなければならず、乱雑で一貫性のないデータになりがちです。多数の場所で情報の更新が必要になるというこの問題は、データ異常と呼ばれます。
ただし、商品の価格は購入時点で注文レコードにコピーしておくべきです。なぜなら、メインの「商品」テーブルでは、将来商品の価格が変更される可能性がありますが、注文レコードには、取引日に顧客が実際に支払った価格を反映する必要があるからです。この場合、データをコピーして固定する(またはスナップショットを作成する)のが適切な設計上の判断です。
正規化は、このような不整合を排除し、保存容量を節約するために、リレーショナル テーブルとその間の関係を設計する体系的なプロセスです。「正規形」(1NF、2NF、3NF など)は、一連の規範的なルールです。これはデータ冗長性と、それによって生じるデータ異常に対するソリューションであり、アプリケーションのニーズに基づいてデータを効率的かつ確実に整理するための明確な道筋を提供します。
正規化は、テーブルを構造化するための段階的なガイドです。各段階(または「正規形」)は、前の段階を基礎として構築されます。第 3 正規形(3NF)にするには、テーブルが第 1 正規形と第 2 正規形のテストに合格している必要があります。3NF ではデータの整合性とパフォーマンスのバランスが取れるため、ほとんどの運用データベースは、少なくともこの標準を満たすように設計されています。
1NF のルールは、きれいなスプレッドシートを設定するように、テーブルが最初から適切に構造化されていることを確認することです。
ルール: すべての列に一意の名前を付け、すべてのセルに分割できない単一の値のみを含める必要があります。
解決すること: 1 つのセルに項目のリストを入れることはできません。たとえば、「注文」テーブルの「注文商品」列の 1 つのセルに「牛乳、卵、パン」とリストすることはできません。代わりに、商品ごとに独自の行を使用する必要があります。これにより、データの検索と管理が可能になります。
2NF ルールは、テーブルで複合キー(注文 ID と商品 ID のように、2 つ以上の列を組み合わせて作成された主キー)が使用されている場合にのみ適用されます。主キーは、テーブル内のすべての行を一意に識別する値の列または列のセットです。非キー列は、主キーの一部ではない列です。
ルール: テーブルはすでに 1NF である必要があり、すべての非キー列は、複合キーの一部のみではなく、全体に依存する必要があります。
解決すること: データは、完全に従属する場所にのみ保存する必要があります。キーが(注文 ID、商品 ID)のテーブルがある場合、商品価格のような列はこのテーブルに含めるべきではありません。商品価格は商品 ID のみに依存し、注文 ID には依存しないためです。解決策は、商品 ID と商品価格を別の「商品」テーブルに移動することです。このテーブルでは、商品 ID が単一の主キーになります。これにより、その商品を含む注文ごとに、商品の価格が不必要に繰り返されるのを防ぐことができます。
3NF ルールは、データベース設計の最も一般的な目標であり、データポイント間の間接的な関係を取り除くことを目的としています。
ルール: テーブルは 2NF である必要があり、非キー列は主キーのみに依存し、他の非キー列に依存してはいけません。
解決すること: 1 つのキー以外のデータが、別のキー以外のデータの値を決定するのを回避します。オフィス ID(非キー列)とオフィスの場所(別の非キー列)を保存する「従業員」テーブルについて考えてみましょう。オフィスの場所は、従業員の ID(テーブルの主キー)ではなく、オフィス ID によって決まります。この間接的なリンクは推移的依存関係です。これを修正するには、オフィス ID とオフィスの場所のみを含む新しい「オフィス」テーブルを作成し、オフィス ID を使用して 2 つのテーブルをリンクします。これにより、オフィスの場所が変更された場合でも、1 か所だけを更新すれば済みます。
機能 | 正規化 | 非正規化 |
最終目標 | 冗長性を減らし、データの完全性を向上させます。 | 読み取りパフォーマンスを向上させる |
ユースケースの例 | トランザクション データベース(頻繁な更新)。 | 分析データベースとデータ ウェアハウス(頻繁な読み取り)、作成後に変更してはならないデータ(契約書や請求書のスナップショットなど)。 |
結果 | テーブルが増え、データ重複が減少。 | テーブル数を少なくして、意図的にデータを重複させます。 |
機能
正規化
非正規化
最終目標
冗長性を減らし、データの完全性を向上させます。
読み取りパフォーマンスを向上させる
ユースケースの例
トランザクション データベース(頻繁な更新)。
分析データベースとデータ ウェアハウス(頻繁な読み取り)、作成後に変更してはならないデータ(契約書や請求書のスナップショットなど)。
結果
テーブルが増え、データ重複が減少。
テーブル数を少なくして、意図的にデータを重複させます。
非正規化とは、データベースに意図的に冗長データを追加することです。多くの場合、レポートや分析のクエリ パフォーマンスを向上させるために行われます。これはトレードオフであり、データの取得を高速化する代わりに、データの完全性をある程度犠牲にし、保存容量を増やします。ただし、法的契約のようなシナリオでは、将来の変更に依存しないデータのスナップショットを作成するために、このような意図的な冗長性を持たせることがあります。これにより、契約締結時に記録された条件、名前、価格は永続的に固定され、プライマリの顧客データや商品データが後で更新された場合でも利用することができます。
正規化により、リレーショナル データベース(Cloud SQL や Spanner など)は、「正規形」を使用してデータを構造化し、一般的な問題を回避することで、効率性、信頼性、管理のしやすさが向上します。
データ冗長性を低減
顧客の住所などの各データを 1 か所にのみ保存することで、保存容量を節約し、効率を高めます。
データの異常を排除
冗長データで発生する可能性のある不整合(挿入、削除、更新の異常など)を回避します。
データの整合性を向上
各データが正確で、1 か所にのみ保存されることを保証することで、データベース全体でデータの正確性と一貫性を確保します。
Google Cloud は、データベースの正規化をサポートし、そのメリットを活かせるさまざまなサービスを提供しています。



