📌 結論から理解する
関数従属=「Aが決まればBが一意に決まる」
関数従属(Functional Dependency)は、属性間の「決定関係」を表します。
「学生IDが決まれば氏名が一意に決まる」→ 学生ID → 氏名 と表記します。
正規化の理論的基盤であり、これを理解しないと正規化の手順が暗記になってしまいます。
関数従属の図解
学生ID
決定する側(決定項)
決定する側(決定項)
→
氏名 / 学部 / 住所
決まる側(従属項)
決まる側(従属項)
学生ID → 氏名
学生ID → 学部
学生ID → 住所
学生ID → 学部
学生ID → 住所
部分関数従属と完全関数従属
複合主キー(A, B)がある場合の従属関係の種類です。
✅ 完全関数従属(2NFの条件)
(注文ID, 商品ID) → 数量
→ 注文IDだけでも商品IDだけでも数量は決まらない。組み合わせ全体が必要。
→ 注文IDだけでも商品IDだけでも数量は決まらない。組み合わせ全体が必要。
❌ 部分関数従属(2NF違反)
(注文ID, 商品ID) → 商品名
→ 商品名は商品IDだけで決まる(注文IDは不要)。これが部分従属。
→ 商品名は商品IDだけで決まる(注文IDは不要)。これが部分従属。
推移関数従属
「AがBを決め、BがCを決める」という間接的な依存関係です(3NF違反の原因)。
社員ID
→
部門コード
→
部門名
社員ID → 部門コード
部門コード → 部門名
∴ 社員ID → 部門名(推移的に)
部門コード → 部門名
∴ 社員ID → 部門名(推移的に)
社員を転部門すると部門名まで変わる必要がある→更新異常の原因!
推移関数従属は3NFで除去します。「社員テーブル」と「部門テーブル」に分離することで解消します。
🧠 確認クイズ
Q1. "注文ID, 商品ID → 数量" の関係はどの種類の関数従属か?
Q2. "(注文ID, 商品ID) → 商品名" で、商品名が商品IDだけで決まる場合、これは何か?
Q3. "社員ID → 部門コード → 部門名" のように間接的に決まる関係を何というか?