データベース正規化 は、構造化された一貫した方法でデータを整理し、冗長性を排除し、リレーショナル データベース内のデータの整合性を確保します。これにより、データベースの管理、クエリ、保守が容易になり、エラーが減少します。
正規化ルールに従うことで、保守が容易でエラーが発生しにくいデータベースを設計できます。
正規化に入る前に、リレーショナル データベースの基本について知っておきたいと思いました。
主キー - テーブル内の各行の一意の識別子。各レコードを一意に識別できるようにします。
外部キー - あるテーブルのフィールドで、別のテーブルの主キーにリンクし、2 つのテーブル間に関係を作成します
正規化は冗長性と一貫性のない依存関係を排除するためのものであると述べました。それは何ですか?
冗長データ とは、同じデータを複数の場所に保存することを意味し、ディスク領域を無駄にし、メンテナンスの問題を引き起こします。データに変更が発生した場合は、すべての場所で更新する必要があります。
不整合な依存関係は、データベース内のデータが予測不可能または不正確な方法で他のデータに依存している場合に発生します。これによりエラーが発生し、データベースの信頼性が低下する可能性があります。
運転試験に学習者、駐車、路上試験などの段階があるのと同様に、標準形式をプロセス内のチェックポイント/ルールと考えてください。
このデータを正規化するために、学生とそのコースに対して別のテーブルを作成します。
1NF は繰り返しグループを削除するだけであり、冗長性は削除しません。だからこそ2NFがあるのです。
テーブルが次の基準を満たす場合、テーブルは 2NF にあると言われます:
もう1NFにあります
部分的な依存関係はありません。つまり、キー以外の属性はすべて主キーに完全に依存します。
キー以外の属性が主キーのみに依存するようにすることで、推移的な依存関係を削除します。
ここで、3NF を理解するための鍵となる 推移的な依存関係 を理解する必要があります。
推移的な依存関係は、属性 (列) が主キーに直接依存するのではなく、別の非キー属性に依存する場合に発生します。
3NF が必要です
これは 3NF の最終構造です:
部分的な依存関係はありません (すべての属性がそれぞれのテーブルの主キー全体に完全に依存しているため)。
推移的な依存関係はありません (非キー属性が他の非キー属性に依存しないため)。
3NF: 推移的な依存関係がないことを保証します。
EKNF: すべての機能依存関係が基本的であることを保証し、3NF が処理できない可能性のあるより複雑な依存関係に対処することで、3NF をさらに改良します。
次の場合、テーブルは BCNF にあります。
スーパーキー: テーブル内の行を一意に識別できる 1 つ以上の列のセット。
機能的依存関係: 1 つの属性が別の属性を一意に決定する関係。
BCNF の次のレベルの通常形式。
その他の標準形式は関数の依存関係に関係し、4NF は多値依存関係として知られるより一般的なタイプの依存関係に関係します。
多値依存関係 - 1 つの属性が他の属性とは独立して別の属性の複数の値を決定する場合に発生します。
プロジェクト結合標準形式 (PJNF) としても知られ、最高レベルの正規化です。テーブルがすでに 4NF にあり、データの整合性を失わずに小さなテーブルに分解できない場合、そのテーブルは 5NF になります。これは、テーブル内のすべての重要な結合依存関係が候補キーによって暗示されることを意味します。
このテーブルを小さなテーブルに分解して冗長性を排除した場合でも、情報を失うことなく元のテーブルを再構築できることを確認する必要があります。 5NF では、この分解は、情報が失われないように行われ、すべての結合依存関係が保持されます。ウィットに富んだ例を説明します
パフォーマンスを向上させるためにテーブルは非正規化される場合があります。
正規化によりテーブルとリレーションシップの数が増加します。
リレーションシップを越えて複数のテーブルにアクセスするには、単一のテーブルにアクセスするよりも多くの処理が必要です。
以上がデータベースの正規化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。