ホームページ >データベース >mysql チュートリアル >データベースの正規化について: 効率的で一貫性のあるデータ ストレージの確保

データベースの正規化について: 効率的で一貫性のあるデータ ストレージの確保

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 15:36:14736ブラウズ

Understanding Database Normalization: Ensuring Efficient and Consistent Data Storage

データベースの正規化とは何ですか?

正規化 は、大きなテーブルを小さなテーブルに分割し、テーブル間の関係を定義することによって、リレーショナル データベース内のデータを整理して冗長性と依存性を減らすプロセスです。正規化の主な目的は、データの整合性を確保し、挿入、更新、削除の異常などのデータの異常を最小限に抑えることです。


正規化の目的

  1. 冗長性の削除:

    重複したデータをデータベースに保存しないようにすると、ストレージ領域が節約され、不整合が防止されます。

  2. データの整合性を確保する:

    正規化によりデータを効率的に整理することで、データの正確性、一貫性、信頼性が確保されます。

  3. 異常を最小限に抑える:

    冗長性を減らすと、次のような問題を防ぐことができます。

    • 挿入異常: 他の関連データが欠落しているため、データを挿入できません。
    • 更新異常: 更新後のデータの不整合。
    • 削除異常: レコードを削除する際の意図しないデータの損失。
  4. クエリの最適化:

    正規化されたデータは、論理的な関係でデータを構造化することで、より効率的なクエリを実行できます。


標準形

正規化は、正規形式として知られる段階的に行われます。各正規形には、正規化の次のレベルに進むために従う必要がある特定のルールがあります。主な正規形は次のとおりです:


1.第一正規形 (1NF)

  • ルール:

    次の場合、テーブルは 1NF にあります:

    • 各列にはアトミック (分割不可能な) 値のみが含まれます。
    • 各列には単一タイプの値が含まれます。
    • 各レコードは一意である必要があります。

- :

1NF の前 (繰り返しグループ):

OrderID Product Quantity
1 Apple, Banana 2, 3
2 Orange 1

1NF以降:

OrderID Product Quantity
1 Apple 2
1 Banana 3
2 Orange 1

2.第 2 正規形 (2NF)

  • ルール:

    次の場合、テーブルは 2NF にあります:

    • 1NFにあります。
    • すべての非キー列は、主キーに完全に依存します。
  • :


    部分依存の概念は 2NF では排除されています。これは、すべての非キー列が主キーの一部ではなく全体に依存する必要があることを意味します。

- :

2NF より前:

OrderID Product CustomerName Price
1 Apple John 10
1 Banana John 5
2 Orange Jane 8

ここで、CustomerName は、主キー全体 (OrderID、Product) ではなく、OrderID のみに依存します。

2NF以降:
テーブル:

  • 注文 (注文ID、顧客名)
  • 注文詳細 (注文ID、製品、価格)

注文テーブル:

OrderID CustomerName
1 John
2 Jane

OrderDetails テーブル:

OrderID Product Price
1 Apple 10
1 Banana 5
2 Orange 8

3.第 3 正規形 (3NF)

  • ルール:

    次の場合、テーブルは 3NF にあります:

    • 2NFにあります。
    • 推移的な依存関係はありません。非キー列は別の非キー列に依存しないでください。
  • :

3NF より前:

OrderID Product Category Supplier
1 Apple Fruit XYZ
2 Carrot Vegetable ABC

ここで、SupplierCategory に依存しており、これは推移的な依存関係です。

3NF以降:
テーブル:

  • 注文 (OrderID、製品、カテゴリ)
  • カテゴリ (カテゴリ、サプライヤー)

注文テーブル:

OrderID Product Category
1 Apple Fruit
2 Carrot Vegetable

カテゴリ表:

Category Supplier
Fruit XYZ
Vegetable ABC

4.ボイス・コッド正規形 (BCNF)

  • ルール:

    次の場合、テーブルは BCNF にあります:

    • 3NFにあります。
    • すべての行列式 (別の列を決定する列) は 候補キー です。
  • :

BCNF の前:

CourseID Instructor Room
101 Dr. Smith A1
101 Dr. Johnson A2
102 Dr. Smith B1

この場合、InstructorRoom を決定しますが、Instructor は候補キーではありません。 BCNF への移行にあたり、インストラクターとルームの関係を分離します。

BCNF 後:
テーブル:

  • コース (コースID、講師)
  • 部屋(インストラクター、部屋)

コース表:

CourseID Instructor
101 Dr. Smith
101 Dr. Johnson
102 Dr. Smith

部屋のテーブル:

Instructor Room
Dr. Smith A1
Dr. Johnson A2
Dr. Smith B1

正規化の利点

  1. データの冗長性を削減します:

    データはより効率的に保存され、繰り返しや不必要なストレージ容量を防ぎます。

  2. データ異常を防止します:

    正規化は、更新、挿入、または削除時のエラーを防止することで、データの一貫性を維持するのに役立ちます。

  3. クエリのパフォーマンスを向上させます:

    テーブルを適切に構成すると、処理する必要のあるデータが少なくなるため、クエリ処理が高速化されます。

  4. データの整合性:

    定義された関係を通じてデータの正確性と信頼性を保証します。


いつ非正規化するのか?

正規化によりデータの整合性が向上しますが、パフォーマンス上の理由から非正規化が行われる場合があります。非正規化は、特に読み取り負荷の高いアプリケーションにおいて、テーブルを結合して結合の数を減らし、クエリのパフォーマンスを向上させるプロセスです。ただし、これはデータの冗長性や異常を引き起こす可能性があるため、慎重に使用する必要があります。


結論

正規化は、データを整理して冗長性を最小限に抑え、データの整合性を向上させることを目的としたデータベース設計の重要な概念です。正規化により、大きなテーブルを関連する小さなテーブルに分割することで、効率的なストレージとデータの一貫性が確保されます。このプロセスにはいくつかの段階 (1NF、2NF、3NF、および BCNF) が含まれますが、目標は同じです。それは、効率的で保守可能なデータベース スキーマを作成することです。

こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。

以上がデータベースの正規化について: 効率的で一貫性のあるデータ ストレージの確保の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。