リレーショナルデータベースでは、同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定する場合、依存関係が発生します。複数値の依存関係は、表内の1つ以上の行の存在が、その同じ表内の1つ以上の他の行の存在を意味する場合に発生します。つまり、表の2つの属性(または列)は互いに独立していますが、どちらも第3の属性に依存しています。
多値依存は、正規化標準第4正規形(4NF)を防止する。リレーショナルデータベースは、レコードデザインのガイドラインを表す5つの標準形式に従います。これらは、データの更新異常や矛盾を防ぎます。 4番目の正規形は、データベース内の多対1の関係を扱います。
機能依存性と複数値依存性
複数値の依存関係を理解するには、関数の依存関係を再検討することが役に立ちます。
属性Xが属性Yを一意に決定する場合、Yは機能的にXに依存します。これはX→Yと書かれています。例えば、下の「学生」テーブルでは、
| 学生の名前 | メジャー |
|---|---|
| ラヴィ | 美術史 |
| ベス | 化学 |
この関数の依存関係は、Student_Name - > Major . 各Student_Nameは、1つのメジャーとそれ以上のものを正確に決定します。 これらの学生が取るスポーツをデータベースでも追跡したい場合は、これを行う最も簡単な方法は、Sport: ここでの問題は、ラヴィとベスの両方が複数のスポーツをするということです。追加のスポーツごとに新しい行を追加する必要があります。 このテーブルでは、メジャーとスポーツが互いに独立しているため、複数の依存関係が導入されていますが、どちらも学生に依存しています。 これは簡単な例であり、容易に識別できますが、大規模で複雑なデータベースでは多値依存が問題になる可能性があります。 多値依存関係はX→Yと書かれます。この場合: 学生の名前 ->-> メジャー学生の名前->-> スポーツ
これは "Student_Name multidetermines Major"と "Student_Name multidetermines Sport"と読みます。 複数値の依存関係は、少なくとも3つの属性を必要とします。これは、3つの属性に依存する少なくとも2つの属性で構成されているためです。 多値依存関係を持つ表は、第4正規形(4NK)の正規化標準に違反します。これは、不必要な冗長性を作成し、矛盾するデータに寄与することがあるためです。これを4NFにするには、この情報を2つのテーブルに分割する必要があります。 以下の表は、Student_Name - > Majorの関数依存性を持ち、複数値の依存性はありません。 この表には、Student_Name - > Sportという単一の関数依存性もありますが、 複雑なテーブルを単純化して単一のアイデアやテーマに関連する情報を含むようにして、単一のテーブルに異種の情報が多すぎるようにすることによって、正規化がしばしば対処されることは明らかです。学生の名前 メジャー スポーツ ラヴィ 美術史 サッカー ラヴィ 美術史 バレーボール ラヴィ 美術史 テニス ベス 化学 テニス ベス 化学 サッカー 多値依存と正規化
学生の名前 メジャー ラヴィ 美術史 ラヴィ 美術史 ラヴィ 美術史 ベス 化学 ベス 化学 学生の名前 スポーツ ラヴィ サッカー ラヴィ バレーボール ラヴィ テニス ベス テニス ベス サッカー




