Skip to main content

データベースの依存関係を理解するためのガイド

Sails.jsシステム開発 最初は進捗こんな感じとか、その後予約データベース周りを作っていく。 (六月 2026)

Sails.jsシステム開発 最初は進捗こんな感じとか、その後予約データベース周りを作っていく。 (六月 2026)
Anonim

依存関係は、属性間の関係に適用されるか、または関係を定義する制約です。同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定するときに、データベース内で発生します。また、1つの属性(または属性のセット)の値が、同じ表の別の属性(または属性のセット)の値を示すのに十分であることがわかっている関係として、これを記述することもできます。

データベースの依存関係は、学生とデータベースの両方の専門家を混乱させることがあります。幸いにも、彼らは見えるほど複雑ではありません。それらはいくつかの例を使って説明するのが最も良いでしょう。ここでは、一般的なデータベースの依存関係のタイプについて検討します。

データベースの依存関係と機能的依存関係

テーブル内の属性間に依存関係があると言うことは、それらの属性間に機能的な依存関係があると言うことと同じです。属性Bが属性Aに依存するようなデータベースに依存関係がある場合は、次のように記述します。

A→B

たとえば、社会保障番号(SSN)と名前を含む従業員の特性を列挙した表では、従業員の名前がSSNから一意に決定できるため、名前はSSN(またはSSN - >名前)に依存していると言えるでしょう。しかし、複数の従業員が同じ名前を持つことができますが、常に異なるSSNを持つため、逆のステートメント(name - > SSN)は真です。

些細な機能依存性

些細な関数の依存関係は、元の属性を含む属性のコレクションに対する属性の関数の依存関係を記述するときに発生します。たとえば、{A、B}→Bは、{name、SSN}→SSNのように、単純な関数の依存関係です。このタイプの関数依存性は、常識から導かれることがあるため、自明と呼ばれます。あなたがすでにBの値を知っていれば、Bの値はその知識によって一意に決定できることは明らかです。

完全な機能依存性

関数の依存関係の要件を既に満たしており、関数依存ステートメントの左側の属性セットをそれ以上減らすことはできません。たとえば、{SSN、age} - > nameは関数の依存関係ですが、依存関係に影響を与えずにステートメントの左側から年齢を削除できるため、完全な関数依存ではありません。

推移依存性

一時的な依存関係は、関数の依存関係を引き起こす間接的な関係が存在する場合に発生します。たとえば、A - > CとB - > Cの両方が真であるため、A - > Cはそれが真であるときに推移的な依存関係になります。

複数値の依存関係

複数値の依存関係は、表内の1つ以上の行の存在が、その同じ表内の1つ以上の他の行の存在を意味する場合に発生します。たとえば、多くの車種を製造しているが、常に各モデルの赤と青の両方の色を作る自動車会社を想像してみてください。会社が製造する各自動車のモデル名、色、年を含む表がある場合、その表に多値依存があります。特定のモデル名と年の行が青で表示されている場合、その同じ車の赤いバージョンに対応する同様の行が存在する必要があります。

依存性の重要性

データベースの依存関係は、データベースの正規化で使用される基本的な構成要素、つまりデータベース内のデータを効率的に整理するプロセスを提供するため、理解することが重要です。例えば:

  • 表が第2正規形(2NF)になるためには、表の中で候補キーのサブセットに機能的に依存している非プライム属性が存在してはならない
  • 表を第3正規形(3NF)にするには、すべての非プライム属性がすべての候補キーに対して非暫定的な関数従属関係を持たなければなりません。
  • テーブルがBoyce-Codd標準形式(BCNF)になるためには、すべての関数依存関係(単純な依存関係以外)はスーパーキー上になければなりません。
  • テーブルを4番目の正規形(4NF)にするには、複数値の依存関係がなくてはなりません。