データベース:関数従属
■ 関数従属
関数従属とは
ある属性の値により、他の属性の値を一意に識別出来ることを、関数従属という。
例えば、社員番号が特定出来れば、社員名が一意に定まる場合、社員名は社員番号に関数従属しているという。
関数従属の表現方法として、社員番号 → 社員名 と表現する。
また、関数従属には、 完全関数従属 、 部分関数従属 、 推移的関数従属 がある。
まず完全関数従属と部分関数従属について、以下の例を元に説明して行く。
<関係スキーマ>
注文明細(注文番号,商品コード,商品名,数量)
<関数従属>
{注文番号,商品コード} → 数量
商品コード → 商品名
完全関数従属
{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 が成り立つ。
- 正規化と合わせて理解する事が重要である。
★午後試験対策ポイント★
- 関数従属を見分けるには、まず関係スキーマの候補キーを考えること。