データベースの正規化(簡単な英語で説明)
データベースの正規化の概要
データベースの正規化は、データベースをテーブルと列に編成するために使用されるプロセスです。これに関する主なアイデアは、テーブルは特定のトピックに関するものであり、サポートトピックのみが含まれている必要があるということです。例として情報を含むスプレッドシートを取り上げます。データには、いくつかの目的を果たす営業担当者と顧客が含まれています。
- 組織内の営業担当者を特定する
- 会社が求めるすべての顧客を一覧表示する製品を販売するには
- 特定の顧客に電話をかける営業担当者を特定します。
テーブルを1つの目的に限定することで、データベースに含まれる重複データの数を減らすことができます。これにより、データベースの変更に起因するいくつかの問題が解消されます。
これらの目的を達成するために、いくつかの確立されたルールを使用します。これらのルールを適用すると、新しいテーブルが形成されます。手に負えないものから最適化されたものへの進行は、いくつかの正規形を通過します。
ほとんどのデータベースが使用している正規形は3つあります。テーブルは、連続する各データベース正規化フォームを満たすため、データベース変更の異常が発生しにくくなり、唯一の目的またはトピックに焦点が当てられます。先に進む前に、データベーステーブルの定義を理解していることを確認してください。
データベースの正規化の理由
データベースを正規化する主な理由は3つあります。 1つは重複データを最小限に抑えること、2つ目はデータ変更の問題を最小限に抑えるか回避すること、3つ目はクエリを簡素化することです。
さまざまな正規化の状態を確認しながら、各フォームがこれらの問題にどのように対処するかについて説明しますが、最初に、正規化されていないデータをいくつか見て、潜在的な落とし穴について説明します。
問題を理解したら、正規化をよりよく理解できると思います。次の表を検討してください。
最初に気付くのは、このテーブルが次のような多くの目的に役立つことです。
- 組織の営業担当者の特定
- 売上の一覧表示オフィスと電話番号
- 営業担当者と営業所の関連付け
- 各営業担当者の顧客の表示
DBAとして、これは危険信号を発します。一般的に、私は1つの目的を持つテーブルを見るのが好きです。テーブルに多くの目的を果たすことは、多くの課題をもたらします。つまり、データの重複、データの更新の問題、データのクエリの労力の増加です。
データの重複と変更の異常
各営業担当者について、SalesOfficeとOfficeNumberの両方をリストしていることに注意してください。営業担当者のデータが重複しています。情報が重複すると、次の2つの問題が発生します。
- ストレージが増加し、パフォーマンスが低下します。
- データの変更を維持することがより困難になります。
例:
シカゴのオフィスをイリノイ州エバンストンに移転するかどうかを検討します。これをテーブルに適切に反映するには、現在シカゴにいるすべてのSalesPersonのエントリを更新する必要があります。私たちの表は小さな例ですが、それよりも大きいかどうかを確認できます。これには、何百もの更新が含まれる可能性があります。
これらの状況は変更の異常です。データベースの正規化はそれらを修正します。発生する可能性のある変更の異常は3つあります。
異常の挿入
行全体の情報がわかるまで記録できない事実があります。この例では、営業担当者も知るまで、新しい営業所を記録することはできません。どうして?レコードを作成するには、主キーを指定する必要があるためです。この場合、これはEmployeeIDです。
異常の更新
この場合、同じ情報が複数の行にあります。たとえば、オフィス番号が変更された場合、複数の更新を行う必要があります。すべての行を更新しないと、不整合が発生します。
削除の異常
行を削除すると、複数のファクトセットが削除されます。たとえば、John Huntが退職した場合、その行を削除すると、ニューヨークのオフィスに関する情報が失われます。
検索と並べ替えの問題
最後に検討する理由は、データの検索と並べ替えを簡単にすることです。 Fordなどの特定の顧客を検索する場合は、SalesStaffテーブルで、次のようなクエリを作成する必要があります。
SELECT SalesOfficeFROM SalesStaffWHERE Customer1 = ‘Ford’ OR Customer2 = ‘Ford’ OR Customer3 = ‘Ford’
顧客が何らかの理由であったかどうかは明らかです。 1つの列で、クエリはより単純になります。また、クエリを実行して顧客で並べ替えるかどうかも検討してください。
現在のテーブルでは、これは困難です。 3つの別々のUNIONクエリを使用する必要があります!データを異なるテーブルに分割することで、これらの異常を排除または削減できます。これにより、データは単一の目的を果たすテーブルに配置されます。
テーブルを再設計するプロセスは、データベースの正規化です。
データベースの正規化の定義
データベースの正規化には、1番目、2番目、3番目の正規形の3つの一般的な形式があります。また、それぞれ1NF、2NF、3NFとも略されます。
BCNFなど、いくつかの追加の形式がありますが、私はそれらが高度であり、最初に学ぶ必要はあまりないと考えています。
フォームはプログレッシブです。つまり、第3正規形の資格を得るには、テーブルは最初に第2正規形の規則を満たし、第2正規形は第1正規形の規則に従う必要があります。さまざまな形式とルールについて詳しく説明する前に、さまざまな形式を要約しましょう。
- 最初の正規形–情報は、各列に原子値が含まれるリレーショナルテーブルに格納されます。列の繰り返しグループはありません。
- 第2正規形–テーブルは第1正規形であり、すべての列はテーブルの主キーに依存します。
- 第3正規形–テーブルは第2正規形であり、そのすべての列が主キーに一時的に依存しているわけではありません
ルールがあまり意味をなさない場合でも、心配する必要はありません。それらを理解するのに役立つ記事にリンクしました。
今のところ、データベースの正規化には相互に3つのルールがあることを理解することが重要です。データベースの正規化を複雑に見える人もいます。
しかし、そうである必要はなく、理解すれば直感的になります。