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

DBMSにおける完全関数従属とは?定義と具体例をわかりやすく解説

完全関数従属(Full Functional Dependency)とは

データベース管理システム(DBMS)において、ある属性が別の属性に対して完全関数従属であるとは、その属性に関数従属している一方で、その属性のいかなる真部分集合にも関数従属していないことを意味します。

例えば、属性Qが属性Pに完全関数従属であるのは、「QがPに関数従属しており、かつPのいかなる真部分集合にも従属していない」場合のみです。

具体例で理解する完全関数従属

以下の2つのリレーション(テーブル)を見てみましょう。

テーブル例:ProjectCost

ProjectIDProjectCost
0011000
0015000

テーブル例:EmployeeProject

EmpIDProjectIDDays
E099001320
E056002190

上記のリレーションは以下のような関係を表しています。

  • Days は、従業員がプロジェクトに費やした日数を示します。
  • ProjectCost は、各プロジェクトのコストを示します。

このとき、次のような関数従属が成り立つとします。

EmpID, ProjectID, ProjectCost → Days

なぜ「完全」な関数従属ではないのか

一見すると上記の関数従属は正しいように思えますが、これは完全関数従属ではありません

その理由は、属性の部分集合 {EmpID, ProjectID} だけでも、従業員がプロジェクトに費やした日数 {Days} を十分に特定できるからです。つまり、ProjectCost という属性は Days を決定するために不要であり、余分な属性が含まれています。

正しい完全関数従属

以上を整理すると、このケースにおける完全関数従属は次のように表されます。

{EmpID, ProjectID} → Days

このように、決定に必要な最小限の属性だけで構成された関数従属こそが、完全関数従属と呼ばれます。この概念は、データベースを第2正規形(2NF)に正規化する際の重要な基礎となります。

  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つのコフマン条件がすべて成立している場合