MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

DBMSにおける多値従属性(多値依存性)とは?基本概念と第4正規形への対応を解説

多値従属性(Multi-valued Dependency)とは

多値従属性(多値依存性)とは、テーブル内のある行の存在が、同じテーブル内の他の1つ以上の行の存在を必然的に意味する場合に発生する依存関係のことです。

あるテーブルが属性 P、Q、R を持っている場合、Q と R は P に対する多値的な事実であると表現できます。

多値従属性は二重矢印「->->」で表されます。

->->

先ほどの例で言えば、以下のように記述します。

P ->-> Q
P ->-> R

この場合、多値従属性が成立するのは、Q と R が互いに独立した属性であるときだけです。なお、多値従属性を持つテーブルは第4正規形(4NF)に違反していることになります。

具体例で理解する多値従属性

次の例を見てみましょう。

<Student>(学生テーブル)

StudentName(学生名)CourseDiscipline(専攻分野)Activities(活動)
Amit数学
Amit数学ダンス
Yuvrajコンピュータクリケット
Akash文学ダンス
Akash文学クリケット
Akash文学

このテーブルでは、学生の AmitAkash が複数の活動に関心を持っていることがわかります。

これが多値従属性と呼ばれる理由は、学生の 専攻分野(CourseDiscipline)活動(Activities) からは独立している一方で、どちらも学生本人には依存しているためです。つまり、専攻と活動は互いに関係なく、それぞれ複数の値を取り得るのです。

したがって、多値従属性は次のように表されます。

StudentName ->-> CourseDiscipline
StudentName ->-> Activities

上記のリレーションは、正規化における第4正規形(4NF)に違反しています。

多値従属性の解消方法

この問題を解決するには、テーブルを2つの独立したテーブルに分割し、多値従属性を解消します。

<StudentCourse>(学生・専攻テーブル)

StudentName(学生名)CourseDiscipline(専攻分野)
Amit数学
Yuvrajコンピュータ
Akash文学

<StudentActivities>(学生・活動テーブル)

StudentName(学生名)Activities(活動)
Amit
Amitダンス
Yuvrajクリケット
Akashダンス
Akashクリケット
Akash

このように分割することで多値従属性が解消され、代わりに次の2つの関数従属性が得られます。

StudentName -> CourseDiscipline
StudentName -> Activities

この結果、各テーブルは第4正規形(4NF)の要件を満たし、データの冗長性や更新時の不整合を防ぐことができるようになります。

  1. DBMSの機能依存性とは?基本概念から種類・アームストロングの公理まで解説

    機能依存性(Functional Dependency)とはDBMSにおける機能依存性とは、その名の通り、テーブル内の属性同士が互いに依存し合う関係を指します。リレーショナルデータベースの提唱者であるE.F.コッド(E. F. Codd)によって導入されたこの概念は、データの冗長性を防ぎ、不良なテーブル設計を発見するための重要な手がかりとなります。概念を正確に理解するために、属性AとBを持つ関係Rを考えてみましょう。機能依存性は「→(矢印)」で表現されます。例えば、次のように記述した場合:A → Bこれは「BはAに関数的に依存している」ことを意味します。つまり、属性Aの値が決まれば、属性Bの値

  2. DBMSのデッドロックとは?発生条件と対策手法をわかりやすく解説

    デッドロックとはデッドロックとは、2つ以上のプロセスが、それぞれ実行の完了に必要なリソースを相手側が保持しており、互いに待ち続けてしまう状態を指します。上記の図では、プロセス1がリソース1を保持しており、リソース2を必要としています。同様に、プロセス2はリソース2を保持し、リソース1を必要としています。どちらのプロセスも相手の持つリソースがなければ処理を完了できないにもかかわらず、自分のリソースを手放そうとしないため、プロセス1とプロセス2はデッドロック状態に陥ります。コフマン条件(Coffman Conditions)デッドロックが発生するのは、次の4つのコフマン条件がすべて成立している場合