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

依存関係は、属性間の関係に適用または定義する制約です。 これは、同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定するときにデータベースで発生します。 これは、 価値 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は 推移的な依存関係 A-> BとB-> Cの両方が真であるという理由だけで真である場合。

多値従属性

多値従属性は、テーブルに1つ以上の行が存在することが、同じテーブルに1つ以上の他の行が存在することを意味する場合に発生します。 たとえば、多くのモデルの自動車を製造しているが、常に各モデルの赤と青の両方の色を製造している自動車会社を想像してみてください。 会社が製造する各車のモデル名、色、および年を含むテーブルがある場合は、 多値従属性 そのテーブルで。 特定のモデル名と年の行が青色である場合、同じ車の赤色バージョンに対応する同様の行も存在する必要があります。

依存関係の重要性

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

  • テーブルが入るために 2番目の正規形(2NF)、のサブセットに機能的に依存している非プライム属性のケースがあってはなりません。 候補キー.
  • テーブルが入るために 3番目の正規形(3NF)、すべての非プライム属性は、すべての候補キーに対して非推移的な関数従属性を持っている必要があります。
  • テーブルが入るために ボイスコッド正規形(BCNF)、すべての機能依存性(些細な依存性を除く)はスーパーキー上にある必要があります。
  • テーブルを第4正規形(4NF)にするためには、多値従属性があってはなりません。