ホームページ >データベース >mysql チュートリアル >データベースの正規化について: 効率的で一貫性のあるデータ ストレージの確保
正規化 は、大きなテーブルを小さなテーブルに分割し、テーブル間の関係を定義することによって、リレーショナル データベース内のデータを整理して冗長性と依存性を減らすプロセスです。正規化の主な目的は、データの整合性を確保し、挿入、更新、削除の異常などのデータの異常を最小限に抑えることです。
冗長性の削除:
重複したデータをデータベースに保存しないようにすると、ストレージ領域が節約され、不整合が防止されます。
データの整合性を確保する:
正規化によりデータを効率的に整理することで、データの正確性、一貫性、信頼性が確保されます。
異常を最小限に抑える:
冗長性を減らすと、次のような問題を防ぐことができます。
クエリの最適化:
正規化されたデータは、論理的な関係でデータを構造化することで、より効率的なクエリを実行できます。
正規化は、正規形式として知られる段階的に行われます。各正規形には、正規化の次のレベルに進むために従う必要がある特定のルールがあります。主な正規形は次のとおりです:
ルール:
次の場合、テーブルは 1NF にあります:
OrderID | Product | Quantity |
---|---|---|
1 | Apple, Banana | 2, 3 |
2 | Orange | 1 |
OrderID | Product | Quantity |
---|---|---|
1 | Apple | 2 |
1 | Banana | 3 |
2 | Orange | 1 |
ルール:
次の場合、テーブルは 2NF にあります:
注:
部分依存の概念は 2NF では排除されています。これは、すべての非キー列が主キーの一部ではなく全体に依存する必要があることを意味します。
OrderID | Product | CustomerName | Price |
---|---|---|---|
1 | Apple | John | 10 |
1 | Banana | John | 5 |
2 | Orange | Jane | 8 |
ここで、CustomerName は、主キー全体 (OrderID、Product) ではなく、OrderID のみに依存します。
2NF以降:
テーブル:
OrderID | CustomerName |
---|---|
1 | John |
2 | Jane |
OrderID | Product | Price |
---|---|---|
1 | Apple | 10 |
1 | Banana | 5 |
2 | Orange | 8 |
ルール:
次の場合、テーブルは 3NF にあります:
例:
OrderID | Product | Category | Supplier |
---|---|---|---|
1 | Apple | Fruit | XYZ |
2 | Carrot | Vegetable | ABC |
ここで、Supplier は Category に依存しており、これは推移的な依存関係です。
3NF以降:
テーブル:
OrderID | Product | Category |
---|---|---|
1 | Apple | Fruit |
2 | Carrot | Vegetable |
Category | Supplier |
---|---|
Fruit | XYZ |
Vegetable | ABC |
ルール:
次の場合、テーブルは BCNF にあります:
例:
CourseID | Instructor | Room |
---|---|---|
101 | Dr. Smith | A1 |
101 | Dr. Johnson | A2 |
102 | Dr. Smith | B1 |
この場合、Instructor は Room を決定しますが、Instructor は候補キーではありません。 BCNF への移行にあたり、インストラクターとルームの関係を分離します。
BCNF 後:
テーブル:
CourseID | Instructor |
---|---|
101 | Dr. Smith |
101 | Dr. Johnson |
102 | Dr. Smith |
Instructor | Room |
---|---|
Dr. Smith | A1 |
Dr. Johnson | A2 |
Dr. Smith | B1 |
データの冗長性を削減します:
データはより効率的に保存され、繰り返しや不必要なストレージ容量を防ぎます。
データ異常を防止します:
正規化は、更新、挿入、または削除時のエラーを防止することで、データの一貫性を維持するのに役立ちます。
クエリのパフォーマンスを向上させます:
テーブルを適切に構成すると、処理する必要のあるデータが少なくなるため、クエリ処理が高速化されます。
データの整合性:
定義された関係を通じてデータの正確性と信頼性を保証します。
正規化によりデータの整合性が向上しますが、パフォーマンス上の理由から非正規化が行われる場合があります。非正規化は、特に読み取り負荷の高いアプリケーションにおいて、テーブルを結合して結合の数を減らし、クエリのパフォーマンスを向上させるプロセスです。ただし、これはデータの冗長性や異常を引き起こす可能性があるため、慎重に使用する必要があります。
正規化は、データを整理して冗長性を最小限に抑え、データの整合性を向上させることを目的としたデータベース設計の重要な概念です。正規化により、大きなテーブルを関連する小さなテーブルに分割することで、効率的なストレージとデータの一貫性が確保されます。このプロセスにはいくつかの段階 (1NF、2NF、3NF、および BCNF) が含まれますが、目標は同じです。それは、効率的で保守可能なデータベース スキーマを作成することです。
こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。
以上がデータベースの正規化について: 効率的で一貫性のあるデータ ストレージの確保の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。