データベースの依存関係は、学生とデータベースの両方の専門家によく混乱するトピックです。 幸いにも、それらは複雑ではなく、多くの例を使用して最もよく説明することができます。 この記事では、一般的なデータベースの依存関係の種類を調べます。
データベース依存性/機能依存性
同じデータベーステーブルに格納されている情報が、同じテーブルに格納されている他の情報を一意に決定する場合、依存関係がデータベースに発生します。 また、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)にするには 、すべての非プライム属性がすべての候補キーに非推移的な関数従属関係を持たなければなりません。
- テーブルがBoyce-Codd標準形式(BCNF)になるためには 、すべての関数依存関係(単純な依存関係以外)はスーパーキー上になければなりません。
- テーブルを4番目の正規形(4NF)にするには、複数値の依存関係がなくてはなりません。