⏱ 8分 ★★★★★ 頻出:高

関数従属とは

A→Bの意味・部分従属・推移従属を図で理解。正規化の理論的基盤

関数従属=「Aが決まればBが一意に決まる」

関数従属(Functional Dependency)は、属性間の「決定関係」を表します。

「学生IDが決まれば氏名が一意に決まる」→ 学生ID → 氏名 と表記します。

正規化の理論的基盤であり、これを理解しないと正規化の手順が暗記になってしまいます。

関数従属の図解

学生ID
決定する側(決定項)
氏名 / 学部 / 住所
決まる側(従属項)
学生ID → 氏名
学生ID → 学部
学生ID → 住所

部分関数従属と完全関数従属

複合主キー(A, B)がある場合の従属関係の種類です。

✅ 完全関数従属(2NFの条件)
(注文ID, 商品ID) → 数量
→ 注文IDだけでも商品IDだけでも数量は決まらない。組み合わせ全体が必要
❌ 部分関数従属(2NF違反)
(注文ID, 商品ID) → 商品名
→ 商品名は商品IDだけで決まる(注文IDは不要)。これが部分従属。

推移関数従属

「AがBを決め、BがCを決める」という間接的な依存関係です(3NF違反の原因)。

社員ID
部門コード
部門名
社員ID → 部門コード
部門コード → 部門名
∴ 社員ID → 部門名(推移的に)
社員を転部門すると部門名まで変わる必要がある→更新異常の原因!
推移関数従属は3NFで除去します。「社員テーブル」と「部門テーブル」に分離することで解消します。
🧠 確認クイズ
Q1. "注文ID, 商品ID → 数量" の関係はどの種類の関数従属か?
Q2. "(注文ID, 商品ID) → 商品名" で、商品名が商品IDだけで決まる場合、これは何か?
Q3. "社員ID → 部門コード → 部門名" のように間接的に決まる関係を何というか?