茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

データベース:関数従属

■ 関数従属

関数従属とは

ある属性の値により、他の属性の値を一意に識別出来ることを、関数従属という。

例えば、社員番号が特定出来れば、社員名が一意に定まる場合、社員名は社員番号に関数従属しているという。

関数従属の表現方法として、社員番号 → 社員名 と表現する。

また、関数従属には、 完全関数従属 部分関数従属 推移的関数従属 がある。


まず完全関数従属と部分関数従属について、以下の例を元に説明して行く。

<関係スキーマ>

注文明細(注文番号,商品コード,商品名,数量)

<関数従属>

{注文番号,商品コード} → 数量

商品コード → 商品名


完全関数従属

{A,B} → C であるが、A → C,B → C がともに成り立たない場合、Cは{A,B} に完全関数従属しているという。

  • {注文番号,商品コード} → 数量 であるが、
    • 注文番号 → 数量
    • 商品コード → 数量

がともに成り立たないので、数量は候補キー {注文番号, 商品コード} に、完全関数従属している。


部分関数従属

{A,B}→Cであるが、A→CまたはB→Cのどちらかが成り立つ場合、Cは{A,B}に部分関数従属しているという。

  • {注文番号,商品コード} → 商品名 であるが、
    • 注文番号 → 商品名 は成り立たない
    • 商品コード → 商品名 は成り立つ

商品名は候補キー{注文番号,商品コード} に、部分関数従属している。


次に推移的関数従属について、以下の例を元に説明して行く。

<関係スキーマ>

注文(注文番号,顧客コード,顧客名,電話番号)

<関数従属>

注文番号 → 顧客コード 顧客コード → {顧客名,電話番号}


推移的関数従属

A → B,B → Cであり、B → Aでない場合、CはAに推移的関数従属しているという。

  • 注文番号 → 顧客コード → 顧客名 という関数従属がある。
  • 注文番号 → 顧客コード → 電話番号 という関数従属がある。
    • 顧客コード → 注文番号 は成り立たない
      • (顧客は何度も注文するであろうからタプルを特定出来ない)

両方とも、推移的関数従属している。


★午前試験対策ポイント★

  • A → B,A → CならばA → {B,C} が成り立つ。 
  • A → {B,C} ならば A → B,A → C が成り立つ。 
  • A → B,C → D ならば {A,C} → {B,D} が成り立つ。 
  • A → B,{B,C} → D ならば {A,C} → D が成り立つ。 
  • 正規化と合わせて理解する事が重要である。

★午後試験対策ポイント★

  • 関数従属を見分けるには、まず関係スキーマの候補キーを考えること。

目次へ戻る