データベース設計における多値依存関係

多値依存性が第4正規形を破る

リレーショナルデータベースでは、同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定する場合、依存関係が発生します。 複数値の依存関係は、表内の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 - > - > メジャー
Student_Name - > - > スポーツ

これは "Student_Name multidetermines Major"と "Student_Name multidetermines Sport"と読みます。

複数値の依存関係は、少なくとも3つの属性を必要とします。これは、3つの属性に依存する少なくとも2つの属性で構成されているためです。

多値依存と正規化

多値依存関係を持つ表は、第4正規形(4NK)の正規化標準に違反します。これは、不必要な冗長性を作成し、矛盾するデータに寄与することがあるためです。 これを4NFにするには、この情報を2つのテーブルに分割する必要があります。

以下の表は、Student_Name - > Majorの関数依存性を持ち、複数値の依存性はありません。

学生とメジャー
学生の名前 メジャー
ラヴィ 美術史
ラヴィ 美術史
ラヴィ 美術史
ベス 化学
ベス 化学

この表には、Student_Name - > Sportという単一の関数依存性もありますが、

学生とスポーツ
学生の名前 スポーツ
ラヴィ サッカー
ラヴィ バレーボール
ラヴィ テニス
ベス テニス
ベス サッカー

複雑なテーブルを単純化して単一のアイデアやテーマに関連する情報を含むようにして、単一のテーブルに異種の情報が多すぎるようにすることによって、正規化がしばしば対処されることは明らかです。