📌 結論から理解する
第2正規形=「部分関数従属を除去する」
1NFを満たしつつ、主キーの一部にだけ依存する属性をテーブルから分離することで第2正規形(2NF)になります。
2NFは複合主キーを持つテーブルにのみ適用されます。主キーが1列なら自動的に2NF以上です。
2NF変換の手順(図解)
❌ 1NF(部分関数従属あり)
| 注文ID🔑 | 商品ID🔑 | 数量 | 商品名 | 単価 |
|---|---|---|---|---|
| 2001 | P001 | 2 | ノートPC | 89,800 |
| 2001 | P002 | 1 | マウス | 3,200 |
| 2002 | P001 | 3 | ノートPC | 89,800 |
商品名・単価は「商品ID」だけで決まる(部分従属)→ 更新時にノートPCの単価を全行修正する必要がある
↓ 分離して2NFへ
✅ 2NF:テーブルを2つに分割
注文明細テーブル
| 注文ID🔑 | 商品ID🔑 | 数量 |
|---|---|---|
| 2001 | P001 | 2 |
| 2001 | P002 | 1 |
| 2002 | P001 | 3 |
商品テーブル(分離)
| 商品ID🔑 | 商品名 | 単価 |
|---|---|---|
| P001 | ノートPC | 89,800 |
| P002 | マウス | 3,200 |
2NF変換の手順まとめ
- ① 複合主キーを確認する
- ② 主キーの「一部のみ」に依存する属性を見つける(部分従属)
- ③ 部分従属している属性を、その決定項をPKとした別テーブルに移す
- ④ 元のテーブルには主キーと完全従属している属性だけを残す
2NFが問われる典型パターン:「複合主キーのテーブルで、一方のキーだけで決まる属性がある」→ 分離する。単一主キーのテーブルは自動的に2NFを満たす。
🧠 確認クイズ
Q1. 第2正規形(2NF)の条件として正しいのはどれか?
Q2. 主キーが1列(単一主キー)のテーブルは、自動的に何NFを満たすか?
Q3. 注文明細テーブル(注文ID, 商品ID, 数量, 商品名)を2NFにするには?