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

DBMSにおける部分関数従属(Partial Dependency)とは?2NFとの関係をわかりやすく解説

部分関数従属(Partial Dependency)とは?

部分関数従属とは、非主属性(プライム属性以外の属性)が、候補キーの一部だけに関数従属してしまう状態を指します。

データベースの正規化において、第2正規形(2NF)はこの部分関数従属を取り除くための段階です。つまり、2NFを満たすには、すべての非主属性が候補キー全体に対して完全に関数従属していなければなりません。

それでは、具体的な例を見ていきましょう。

具体例:「StudentProject」テーブル

StudentIDProjectNoStudentNameProjectName
S01199KatieGeo Location
S02120OllieCluster Exploration

上記のテーブルでは、主キー属性は StudentIDProjectNo の組み合わせです。各属性の意味は次のとおりです。

  • StudentID:学生を一意に識別するID
  • StudentName:学生の名前
  • ProjectNo:プロジェクトを一意に識別する番号
  • ProjectName:プロジェクト名

なぜ部分関数従属になるのか

前述のとおり、非主属性である StudentNameProjectName が、候補キーの一部だけで決定できてしまう場合、そのリレーションは部分関数従属の状態にあると言えます。

  • StudentNameStudentID だけで求められる → 部分関数従属が発生
  • ProjectNameProjectNo だけで求められる → 部分関数従属が発生

このように、非主属性が候補キーの一部のみに依存しているため、「StudentProject」リレーションは正規化における2NFに違反しており、良いデータベース設計とは言えません。

部分関数従属の解消方法:テーブルの分解

部分関数従属および2NF違反を解消するには、テーブルを適切に分解します。

分解後の「StudentInfo」テーブル

StudentIDProjectNoStudentName
S01199Katie
S02120Ollie

分解後の「ProjectInfo」テーブル

ProjectNoProjectName
199Geo Location
120Cluster Exploration

テーブルを分解した結果、それぞれのリレーションにおいて非主属性が候補キー全体に完全関数従属するようになり、データベース正規化における第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つのコフマン条件がすべて成立している場合