正規化とは(全体像)
正規化とは、データベースの表を、重複(冗長)がなく、矛盾(不整合)が起きないように、整理するプロセスのことだ。
なぜ必要かというと、同じ情報をあちこちに書くと、片方だけ直し忘れて、矛盾(不整合)が起きるから。だから、情報を1か所にまとめて、重複をなくす。これが正規化だ。
整理整頓でたとえると分かりやすい。散らかって同じものが何か所にもある状態を、重複なく・矛盾なく、きちんと整理するイメージだ。
正規化は、段階を追って進める。
- 第1正規形(1NF) … 1つのマス(セル)に、1つの値だけにする(繰り返し項目をなくす)
- 第2正規形(2NF) … 1NFをさらに整理する
- 第3正規形(3NF) … 2NFをさらに整理する
ここで一番のポイント。通常は、3NFまで整理する。「正規化は、5NFまで進めるのがふつう」と思い込むと誤りで、実務では3NFまでが基本だ。
詳しく:正規化の目的
ここが心臓部。段階と目的を表で押さえよう。
正規化のポイント
| 項目 | やさしい意味 |
|---|---|
| 第1正規形(1NF) | 1つのマスに1つの値(繰り返しをなくす) |
| 第2正規形(2NF) | 1NFをさらに整理 |
| 第3正規形(3NF) | 2NFをさらに整理(通常はここまで) |
| 目的 | 重複(冗長)をなくし、矛盾(不整合)を防ぐ |
正規化の目的は、重複をなくし、矛盾を防ぐことだ。ここで一番のポイント。正規化は、処理を速くするためのものではない。「正規化すると、必ず速くなる」と思い込むと誤りで、むしろ、速くしたいときは、あえて重複させる(非正規化)こともある。正規化と非正規化は、目的が逆だ。
わかりやすく言い換えると
身近なたとえで整理しよう。
正規化は、「散らかった情報を、重複なく・矛盾なく、整理整頓すること」のイメージ。同じ情報を1か所にまとめる。
段階は、「1NF→2NF→3NFと進め、通常は3NFまで」こと。要するに、3段階で整理するのが基本。
「目的は重複排除」というのは、重複をなくし矛盾を防ぐためで、速くするためではないということ。つまり、速くしたいときは、逆にあえて重複させる(非正規化)。
試験のツボ
🔴 一番出る:正規化の目的
①重複(冗長)をなくし、矛盾(不整合)を防ぐ
②同じ情報を1か所にまとめて、整理する
🔴 次に出る:段階
①第1正規形(1NF)→第2正規形(2NF)→第3正規形(3NF)
②通常は3NFまで整理する
🟡 押さえると安定:非正規化との違い
①正規化は重複排除が目的(性能向上ではない)
②速くしたいときは、あえて冗長化する非正規化を使う
よくある間違い
①「正規化は、ふつう5NFまで進める」→ ✗ 通常は3NFまで整理する。5NFなどは特殊なケース。
②「正規化すると、必ず処理が速くなる」→ ✗ 正規化の目的は重複排除と矛盾防止。速くしたいときは、あえて冗長化する非正規化を使う。
③「第1正規形(1NF)は、1つのマスに複数の値を入れる形だ」→ ✗ 1NFは、1つのマスに1つの値だけにする(繰り返し項目をなくす)形。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(正規化の正体)
正規化に関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 重複をなくし矛盾を防ぐために、表を整理していくプロセスである
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 3 です。
正規化は、重複をなくし矛盾を防ぐために、表を整理するプロセスなのです。散らかった情報を整理整頓するイメージなります。
選択肢1は給与計算、選択肢2は請求書の事務、選択肢4は広告で、どれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✗ | 請求書の事務の話 |
| 3 | ✓ | 重複をなくし矛盾を防ぐ整理で正しい |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(段階)
正規化の段階に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与の計算しだいで、段階が決まるとされているものである
- 1NF→2NF→3NFと進め、通常は3NFまで整理するものだ
- 取引先への請求書の枚数しだいで、段階が決まるとされているのだ
- ふつう、5NFまで進めるのが基本だとされているものなのである
解答は 2 です。
正規化は、1NF→2NF→3NFと進め、通常は3NFまで整理するのです。3段階で整理するのが基本なります。
選択肢1の給与、選択肢3の請求書、選択肢4の「5NFまでが基本」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算で決まるのではない |
| 2 | ✓ | 1NF→2NF→3NF・通常3NFまでで正しい |
| 3 | ✗ | 請求書の枚数で決まるのではない |
| 4 | ✗ | 通常は3NFまで |
オリジナル問題3(目的)
正規化の目的に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、必要だとされているものである
- 取引先へ請求書を郵送するときだけ、必要だとされているのである
- 処理を速くすることが、いちばんの目的だとされているものである
- 重複をなくし矛盾を防ぐためのもので、速くするのは目的ではない
解答は 4 です。
正規化は、重複をなくし矛盾を防ぐことで、速くするのは目的ではないのです。速くしたいときは、逆に冗長化する非正規化を使うなります。
選択肢1の給与、選択肢2の請求書、選択肢3の「速くするのが目的」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のときだけではない |
| 2 | ✗ | 請求書のときだけではない |
| 3 | ✗ | 速くするのが目的ではない |
| 4 | ✓ | 重複排除・矛盾防止が目的で正しい |
まとめ
押さえどころ
- 🔴 正規化 = データベースの重複(冗長)をなくし、矛盾(不整合)を防ぐために、表を整理するプロセス。
- 🔴 段階 = 第1正規形(1NF)→第2正規形(2NF)→第3正規形(3NF)。通常は3NFまで。
- 🟡 目的/非正規化 = 目的は重複排除と矛盾防止(性能向上ではない)。速くしたいときは、あえて冗長化する非正規化を使う。
次に学ぶ
- 関係モデル(主キー・外部キー) ── データを表の形で表すモデル。正規化は、その表をきれいに整理する作業。
- データベース ── データを整理してためるしくみ。正規化で、重複や矛盾を防ぐ。
執筆: SikakuQuest編集部