関数従属とは(全体像)
関数従属は、「ある列が決まると、別の列が1つに決まる」という関係。X→Y(XからYへ)と書くよー。
身近にたとえると、学籍番号→氏名。学籍番号が分かれば、その人の氏名は1つに決まる。これが関数従属だよー。
ここで大事なのは、向きは一方向ということ。学籍番号→氏名は成り立つけど、氏名→学籍番号は成り立たない(同姓同名がいると、氏名だけでは学籍番号が1つに決まらないから)。
押さえるのは、関数従属は正規化を考えるときの土台で、種類によって対応する正規形が変わることだよー。
詳しく:FDの向きと正規形の対応だけ覚えれば戦える
ここが記事の心臓部。まず関数従属の基本を見ていこーね。
関数従属(FD)の基本
| 項目 | 内容 |
|---|---|
| 書き方 | X→Y(Xが決まればYが1つに決まる) |
| 例 | 学籍番号→氏名 |
| 向き | 一方向(逆は必ずしも成り立たない) |
ここで一番のひっかけが「X→Yは「XとYが等しい」という意味」という誤解。X→Yは「Xが決まればYが1つに決まる」という一意決定の関係で、等号(=)ではないよー。逆向き(Y→X)も必ず成り立つとは限らないのー。
次に、関数従属の種類が正規化の段階に対応する。
従属の種類と正規形の対応
| 従属の種類 | 内容 | 対応する正規形 |
|---|---|---|
| 部分従属 | 候補キーの「一部」だけで他の列が決まる | 2NFで取り除く |
| 推移従属 | X→Y→Zと間接的に決まる | 3NFで取り除く |
部分従属は2NF、推移従属は3NFで取り除く、という対応を押さえると、正規化の理解がぐっと進むよー。
わかりやすく言い換えると
要するに、学籍番号と氏名でイメージするとラクだよー。
①関数従属(X→Y) … Xが決まればYが1つに決まる(学籍番号→氏名)
②向きは一方向 … 学籍番号→氏名は成り立つが、氏名→学籍番号は成り立たない(同姓同名)
③正規形との対応 … 部分従属は2NF、推移従属は3NFで取り除く
つまり、「X→Yは一意決定(一方向)」「部分従属は2NF・推移従属は3NF」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:関数従属の意味と向き
①X→Yは「Xが決まればYが1つに決まる」という一意決定の関係
②向きは一方向で、逆(Y→X)は必ずしも成り立たない
🔴 次に出る:従属の種類と正規形の対応
①部分従属(候補キーの一部で決まる)は2NFで取り除く
②推移従属(X→Y→Zと間接的に決まる)は3NFで取り除く
🟡 押さえると安定:正規化の土台
①関数従属を調べることが正規化の出発点になる
②X→Yは等号(=)ではなく、一意に決まる関係
よくある間違い
①「X→Yは『XとYが等しい』という意味である」→ ✗ X→Yは「Xが決まればYが1つに決まる」という一意決定の関係。等号ではない。
②「関数従属は逆向き(Y→X)も必ず成り立つ」→ ✗ 向きは一方向。学籍番号→氏名は成り立つが、氏名→学籍番号は成り立たない。
③「部分従属も推移従属も同じ正規形で取り除く」→ ✗ 部分従属は2NF、推移従属は3NFで取り除く。対応が違う。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(関数従属の意味)
関数従属(X→Y)に関する次の記述のうち、正しいものはどれか。
- 関数従属は画面に関数のグラフを表示するための機能のことだとされているものである
- 関数従属はデータを必ず関数で計算してから保存する決まりだとされているものである
- 関数従属はXが決まればYが1つに決まる関係で、学籍番号→氏名のような対応である
- 関数従属はXとYがいつも完全に等しいことを表す等号と同じ意味だとされているものだ
解答は 3 だよー。
関数従属は、Xが決まればYが1つに決まる関係で、学籍番号→氏名のような対応なのー。学籍番号が分かれば氏名が1つに決まる感じだよー。
選択肢1の「グラフを表示」、選択肢2の「関数で計算」、選択肢4の「等号と同じ」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | グラフ表示の機能ではない |
| 2 | ✗ | 関数で計算する決まりではない |
| 3 | ✓ | Xが決まればYが1つに決まる |
| 4 | ✗ | 等号ではなく一意決定の関係 |
オリジナル問題2(FDの向き)
関数従属の向きに関する次の記述のうち、正しいものはどれか。
- 関数従属の向きは一方向で、学籍番号→氏名は成り立つが氏名→学籍番号は成り立たない
- 関数従属は逆向きもいつも必ず成り立つので、向きを気にする必要はないものだとされる
- 関数従属はどんなときも両方向で成り立つことが保証されているものだとされているものだ
- 関数従属は向きという考え方を持たず、向きはまったく無関係なものだとされているものだ
解答は 1 だよー。
関数従属の向きは一方向なのー。学籍番号→氏名は成り立つけれど、氏名→学籍番号は成り立たない(同姓同名がいると氏名だけでは決まらないから)。
選択肢2の「逆もいつも成り立つ」、選択肢3の「両方向で保証」、選択肢4の「向きは無関係」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 一方向・逆は必ずしも成り立たない |
| 2 | ✗ | 逆は必ずしも成り立たない |
| 3 | ✗ | 両方向は保証されない |
| 4 | ✗ | 向きは重要 |
オリジナル問題3(従属の種類と正規形)
従属の種類と正規形に関する次の記述のうち、正しいものはどれか。
- 部分従属も推移従属も、まったく同じ正規形で取り除くものだとされているものである
- 部分従属は画面の色のこと、推移従属は音量のことだとされているものである
- 部分従属と推移従属はどちらも正規化とは無関係なものだとされているものである
- 部分従属は2NF、推移従属は3NFで取り除き、従属の種類が正規形に対応する
解答は 4 だよー。
部分従属は2NF、推移従属は3NFで取り除くのー。従属の種類が正規形に対応していて、関数従属を調べることが正規化の出発点になるよー。
選択肢1の「同じ正規形」、選択肢2の「色・音量」、選択肢3の「正規化と無関係」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 部分は2NF・推移は3NFで違う |
| 2 | ✗ | 色や音量ではない |
| 3 | ✗ | 正規化の土台になる |
| 4 | ✓ | 部分は2NF・推移は3NF |
まとめ
押さえどころ
- 🔴 関数従属の意味と向き = X→Yは「Xが決まればYが1つに決まる」一意決定。向きは一方向(逆は必ずしも成り立たない)。
- 🔴 従属の種類と正規形の対応 = 部分従属は2NF、推移従属は3NFで取り除く。
- 🟡 正規化の土台 = 関数従属を調べることが正規化の出発点。X→Yは等号ではない。
次に学ぶ
執筆: SikakuQuest編集部