関数従属性

関数従属性 (かんすうじゅうぞくせい、FD、英: functional dependency) は、コンピュータの関係データベースにおける関係（表）の2つの属性集合間で、一方の属性集合の値（の集合）がもう一方の属性集合の値（の集合）を関数的に決定するという、制約である。
"R" を関係として、"X" と "Y" をそれぞれ "R" の属性の集合とすると、"X" の各々の値がただ一つの "Y" の値に関連づけられる場合かつその場合に限り、"X" は "Y" を「関数的に決定する」という。
"X" が "Y" を関数的に決定することを、"X" → "Y" と記述する。
慣例として、"X" → "Y" のとき、"X" を決定項、"Y" を従属項と呼ぶ。
"X" → "Y" のとき、ある組（タプル、行）があり、その "X" の値の集合があるとき、対応する "Y" の値の集合が決定される。
簡単のために、"R" を関係とし、"X" と "Y" をそれぞれ "R" の属性の集合とすると、"X" → "Y" は "X" が "Y" の各々の値を関数的に決定すると述べることができる。
以上のことから候補キーは、その関係においてすべての属性値を関数的に決定する最小の属性集合である。
関数従属性 FD: "X" → "Y" は、"Y" が "X" の部分集合である場合、自明な関数従属性であると呼ばれる。
多値従属性は、関数従属性を一般化した概念と位置づけることができる。
関数従属性の決定は、関係モデルとデータベースの正規化と非正規化においてデータベース設計（データモデリング）の重要な部分である。
関数従属性は、属性の定義域（ドメイン）とともに、制約を構成するべく選択される。
ここでいう制約とは、利用者の問題領域にとって不適切なデータをシステムからできる限り排除するであろう制約である。
例えば、自動車とそのエンジンの排気量を調べるシステムを設計することを考える。
各々の自動車には一意に車台番号がわりふられている。
車台番号 → 排気量 と記述することができる。
なぜなら、自動車のエンジンが2つ以上の排気量をもつことは不適切であるからである（この例では自動車はただ一つのエンジンをもつと仮定する）。
しかし 排気量 → 車台番号 と記述することは正しくない。
なぜなら同じ排気量である自動車はたくさんあるからである。
関数従属性により、排気量という属性は候補キーが車台番号である関係（表）の中に存在することが示唆される。
しかしながら、この示唆は必ずしも適切ではない。
例えば、この関数従属性は推移的な関数従属性の結果として現れるからである。
このため（第3正規形以上に）正規化された関係においては、排気量属性は候補キーが車台番号である関係の中には存在しない。
関数従属性の既約の集合.
関数従属性の集合 S は、次の3つの特性をもつとき既約である。
関数従属性の特性.
"X"、"Y"、"Z" を関係 "R" の属性の集合とすると、関数従属性のいくつかの特性を導き出すことができる。
最も重要な特性はアームストロングの規則であり、データベースの正規化において使われる。
前述の規則から、2次的な規則を導き出すことができる。