データベースにおける多値従属性

リレーショナルデータベース、依存関係は、同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定する場合に発生します。 多値従属性は、テーブルに1つ以上の行が存在することが、同じテーブルに1つ以上の他の行が存在することを意味する場合に発生します。 言い換えると、テーブル内の2つの属性(または列)は互いに独立していますが、どちらも3番目の属性に依存しています。

データベースをスクロールして、優れた理事会メンバーになる可能性のあるドナーを探します。
stevecoleimages / Vetta / Getty Images

多値従属性は正規化標準を妨げます 4番目の正規形. リレーショナルデータベースは、レコード設計のガイドラインを表す5つの正規形に従います。 これらは、データの更新の異常や不整合を防ぎます。 4番目の正規形は、 データベース.

機能従属性と 多値従属性

多値従属性を理解するには、何を再検討することが役立ちます。 機能従属性 は。

属性Xが属性Yを一意に決定する場合、Yは機能的にXに依存します。 これはX-> Yと書かれています。 たとえば、以下のStudentsテーブルでは、Student_Nameがメジャーを決定します。

学生の名前 選考科目
ラヴィ 美術史
ベス 化学
学生


この関数従属性は次のように書くことができます:Student_Name-> Major. 各Student_Nameは、メジャーを1つだけ決定し、それ以上は決定しません。

これらの学生がとるスポーツもデータベースで追跡したい場合、これを行う最も簡単な方法は、Sportというタイトルの別の列を追加することです。

学生の名前 選考科目 スポーツ
ラヴィ 美術史 サッカー
ラヴィ 美術史 バレーボール
ラヴィ 美術史 テニス
ベス 化学 テニス
ベス 化学 サッカー
学生

ここでの問題は、ラビとベスの両方がいくつかのスポーツをしていることです。 スポーツを追加するたびに、新しい行を追加する必要があります。

メジャーとスポーツは互いに独立していますが、どちらも学生に依存しているため、この表は多値従属性を導入しています。 これは単純な例であり、簡単に識別できますが、大規模で複雑なデータベースでは、多値従属性が問題になる可能性があります。

多値従属性はX->-> Yと書かれています。 この場合:

学生の名前 ->-> 選考科目
学生の名前 ->-> スポーツ

これは、「Student_NamemultideterminesMajor」および「Student_NamemultideterminesSport」と読み替えられます。

多値従属性は、3番目に依存する少なくとも2つの属性で構成されているため、常に少なくとも3つの属性が必要です。

多値従属性と正規化

多値従属性を持つテーブルは、不要な冗長性を作成し、一貫性のないデータの原因となる可能性があるため、第4正規形の正規化標準に違反します。 これを4NFにするには、この情報を2つのテーブルに分割する必要があります。

以下の表には、Student_Name-> Majorの機能依存性があり、多値従属性はありません。

学生の名前 選考科目
ラヴィ 美術史
ラヴィ 美術史
ラヴィ 美術史
ベス 化学
ベス 化学
学生と専攻

このテーブルには、Student_Name-> Sportの単一の機能依存性もありますが、次のようになります。

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

正規化は、多くの場合、複雑なテーブルを単純化して、関連する情報が含まれるようにすることで実現されます。 単一のテーブルに多くの異なる情報が含まれるようにするのではなく、単一のアイデアまたはテーマに変換します。