DBMSにおける結合従属性(Join Dependency)とは?5NFとの関係を具体例で解説
結合従属性(Join Dependency)とは
結合従属性とは、1つのテーブルを複数のテーブルに分解し、それらを結合(JOIN)することで元のテーブルを完全に復元できる場合に成り立つ依存関係のことです。分解後の各テーブルは、元のテーブルが持つ属性(カラム)の部分集合を含みます。結合従属性は、多値従属性(Multivalued Dependency)をさらに一般化した概念と位置づけられています。
結合従属性は第5正規形(5NF)と密接な関係があります。リレーションが5NFであるためには、まず4NFを満たしている必要があり、さらにそれ以上無損失で分解できない状態でなければなりません。
具体例
以下の <Employee>(社員)テーブルを見てみましょう。
| EmpName(社員名) | EmpSkills(スキル) | EmpJob(担当業務) |
| Tom | Networking | EJ001 |
| Harry | Web Development | EJ002 |
| Katie | Programming | EJ002 |
このテーブルは、以下の3つのテーブルに分解できます。分解可能であるということは、元のテーブルが5NFを満たしていないことを意味します。
<EmployeeSkills>(社員スキル)
| EmpName | EmpSkills |
| Tom | Networking |
| Harry | Web Development |
| Katie | Programming |
<EmployeeJob>(社員担当業務)
| EmpName | EmpJob |
| Tom | EJ001 |
| Harry | EJ002 |
| Katie | EJ002 |
<JobSkills>(業務スキル)
| EmpSkills | EmpJob |
| Networking | EJ001 |
| Web Development | EJ002 |
| Programming | EJ002 |
この場合の結合従属性は、以下のように表されます。
| {(EmpName, EmpSkills), (EmpName, EmpJob), (EmpSkills, EmpJob)} |
上記のリレーションには結合従属性が存在するため、5NFを満たしていません。これは、3つのリレーションを結合した結果が、元の <Employee> リレーションと完全に一致することを意味します。
-
DBMSの機能依存性とは?基本概念から種類・アームストロングの公理まで解説
機能依存性(Functional Dependency)とはDBMSにおける機能依存性とは、その名の通り、テーブル内の属性同士が互いに依存し合う関係を指します。リレーショナルデータベースの提唱者であるE.F.コッド(E. F. Codd)によって導入されたこの概念は、データの冗長性を防ぎ、不良なテーブル設計を発見するための重要な手がかりとなります。概念を正確に理解するために、属性AとBを持つ関係Rを考えてみましょう。機能依存性は「→(矢印)」で表現されます。例えば、次のように記述した場合:A → Bこれは「BはAに関数的に依存している」ことを意味します。つまり、属性Aの値が決まれば、属性Bの値
-
DBMSのデッドロックとは?発生条件と対策手法をわかりやすく解説
デッドロックとはデッドロックとは、2つ以上のプロセスが、それぞれ実行の完了に必要なリソースを相手側が保持しており、互いに待ち続けてしまう状態を指します。上記の図では、プロセス1がリソース1を保持しており、リソース2を必要としています。同様に、プロセス2はリソース2を保持し、リソース1を必要としています。どちらのプロセスも相手の持つリソースがなければ処理を完了できないにもかかわらず、自分のリソースを手放そうとしないため、プロセス1とプロセス2はデッドロック状態に陥ります。コフマン条件(Coffman Conditions)デッドロックが発生するのは、次の4つのコフマン条件がすべて成立している場合