📌 結論から理解する
第3正規形=「推移関数従属を除去する」
2NFを満たしつつ、主キー以外の属性が別の非キー属性を決定する(推移従属)関係を分離することで第3正規形(3NF)になります。
「キー以外がキー以外を決めるのはNG」と覚えると分かりやすい。
3NF変換の図解
❌ 2NF(推移関数従属あり)
| 社員ID🔑 | 氏名 | 部門コード | 部門名 | 部門長 |
|---|---|---|---|---|
| E001 | 田中 | D01 | 営業部 | 山田部長 |
| E002 | 鈴木 | D01 | 営業部 | 山田部長 |
| E003 | 佐藤 | D02 | 開発部 | 中村部長 |
社員ID → 部門コード → 部門名
社員ID → 部門コード → 部長名
↑ 推移関数従属!
社員ID → 部門コード → 部長名
↑ 推移関数従属!
↓ 推移従属を分離して3NFへ
✅ 3NF:部門情報を別テーブルへ
社員テーブル
| 社員ID🔑 | 氏名 | 部門コード🔗 |
|---|---|---|
| E001 | 田中 | D01 |
| E002 | 鈴木 | D01 |
| E003 | 佐藤 | D02 |
部門テーブル(分離)
| 部門コード🔑 | 部門名 | 部長名 |
|---|---|---|
| D01 | 営業部 | 山田部長 |
| D02 | 開発部 | 中村部長 |
2NFと3NFの違いを整理
| 正規形 | 除去する従属 | 条件 |
|---|---|---|
| 2NF | 部分関数従属 | 複合PKの一部→非キー属性を除去 |
| 3NF | 推移関数従属 | 非キー属性→非キー属性の連鎖を除去 |
試験では「このテーブルが3NFでない理由を述べよ」という記述問題が出る。「○○は主キーではなく部門コードに関数従属しているため推移関数従属が存在する」と答えられるようにする。
🧠 確認クイズ
Q1. 第3正規形(3NF)になっていない状態を説明したものはどれか?
Q2. "社員ID→部門コード→部門名" の関係を3NFで解消するには?
Q3. 単一主キーで部分関数従属のないテーブルが3NFでない可能性があるのはどのような場合か?