正規化とは(全体像)
正規化は、表(テーブル)を上手に分けて、同じ情報があちこちに重複しないように整えること。重複があると、直し忘れて食い違う(これを「更新異常」という)。
身近にたとえると、住所録の整理。同じ人の住所をあちこちに書いていると、引っ越したとき直し忘れて住所がバラバラになる。共通の情報は1か所にまとめておけば、直すのも1回で済むよー。
押さえるのは、正規化には段階があって、進むほど厳しくなること。そして実用では3NF(第3正規形)あたりが目安ということだよー。
詳しく:正規化の段階と「3NFが目安」だけ覚えれば戦える
ここが記事の心臓部。まず正規化の段階を見ていこーね。
正規化の段階(進むほど厳しい)
| 段階 | ざっくり何をする |
|---|---|
| 1NF | 1マスに1つの値(くり返しの項目をなくす) |
| 2NF | キーの一部だけで決まる項目を別の表へ |
| 3NF | キー以外の項目どうしで決まる関係をなくす |
| BCNF | 3NFをさらに厳しくした形 |
| 4NF・5NF | より特殊な重複も取り除く |
実務でよく目標にするのは3NF。ここまでやれば、たいていの重複と更新異常は防げるのー。
ここで一番のひっかけが「5NFが一番えらいから、いつも5NFにすべき」という誤解。正規化はやりすぎると、表が増えて処理が遅くなるなど逆効果になることもある。だから実用は3NFが目安で、性能のためにわざと正規化を崩す(非正規化)こともあるよー。
もう1つの要点が、BCNFと3NFの違い。
BCNFと3NFの関係
| 形 | 位置づけ |
|---|---|
| 3NF | 実用の目安 |
| BCNF | 3NFをさらに厳しくした形(より厳密) |
BCNFは3NFと同じではなく、3NFより一段きびしい。よく似ているので「同じもの」と混同しやすいけど、別ものなのー。
わかりやすく言い換えると
要するに、住所録の整理でイメージするとラクだよー。
①正規化の目的 … 同じ情報の重複をなくして、直し忘れ(更新異常)を防ぐ
②3NFが目安 … 実用ではここまでで十分なことが多い
③やりすぎ注意 … 進めるほど表が増える。性能のためにあえて崩すこともある
つまり、「目的は重複をなくして更新異常を防ぐ」「実用は3NFが目安(やりすぎ注意)」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:正規化の目的
①同じデータの重複をなくす
②直し忘れで食い違う「更新異常」を防ぐ
🔴 次に出る:段階と実用の目安
①1NF→2NF→3NF→BCNF→4NF→5NFと進むほど厳しい
②実用は3NFが目安(5NFが常に最良ではない・やりすぎは逆効果)
🟡 押さえると安定:BCNFと3NFの違い
①BCNFは3NFをさらに厳しくした形
②よく似ているが別もの(BCNFのほうが厳密)
よくある間違い
①「正規化はいつも5NFまで進めるのが最良である」→ ✗ 実用は3NFが目安。進めすぎると表が増えて遅くなるなど逆効果のことも。
②「BCNFと3NFはまったく同じものである」→ ✗ BCNFは3NFをさらに厳しくした形で、別もの。
③「正規化の目的はデータをわざと重複させることである」→ ✗ 逆で、重複をなくして更新異常を防ぐのが目的。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(正規化の目的)
正規化の目的に関する次の記述のうち、正しいものはどれか。
- 正規化はデータをわざと多くの場所に重複させて増やすことを目的とするものだとされている
- 正規化は同じデータの重複をなくして、直し忘れで食い違う更新異常を防ぐことを目的とする
- 正規化は画面の表示を派手にする飾りつけのことで、データの整理とは無関係だとされている
- 正規化はデータをすべて1つの表にまとめることだけを目的とするものだとされているものだ
解答は 2 だよー。
正規化の目的は、同じデータの重複をなくして、直し忘れで食い違う「更新異常」を防ぐことなのー。住所録を1か所にまとめておく感じだよー。
選択肢1の「わざと重複させる」、選択肢3の「画面の飾りつけ」、選択肢4の「1つの表にまとめる」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 重複を増やすのではなくなくす |
| 2 | ✓ | 重複をなくし更新異常を防ぐ |
| 3 | ✗ | 画面の飾りつけではない |
| 4 | ✗ | 重複をなくすため表を分けることも |
オリジナル問題2(段階と実用の目安)
正規化の段階に関する次の記述のうち、正しいものはどれか。
- 正規化はどんなときも必ず5NFまで進めるのが最良で、3NFで止めてはいけないものだとされる
- 正規化には段階がなく、すべての表は最初から同じ形に決まっているものだとされているものだ
- 正規化は進めるほど必ず処理が速くなるので、止める理由はないものだとされているものである
- 正規化は1NFから5NFへ進むほど厳しくなり、実用では3NFが目安とされることが多いのだ
解答は 4 だよー。
正規化は1NFから5NFへ進むほど厳しくなって、実用では3NFが目安とされることが多いのー。進めすぎると表が増えて遅くなることもあるから、5NFが常に最良というわけじゃないよー。
選択肢1の「必ず5NFまで」、選択肢2の「段階がない」、選択肢3の「必ず速くなる」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 実用は3NFが目安・5NFが常に最良ではない |
| 2 | ✗ | 段階がある |
| 3 | ✗ | 進めすぎると遅くなることも |
| 4 | ✓ | 進むほど厳しい・実用は3NF |
オリジナル問題3(BCNFと3NF)
BCNFと3NFに関する次の記述のうち、正しいものはどれか。
- BCNFと3NFはまったく同じもので、呼び名が2つあるだけだとされているものである
- BCNFは画面の明るさの設定のことで、表の正規化とは無関係なものだとされているものだ
- BCNFは3NFをさらに厳しくした形で、よく似ているけれど実は別のものなのである
- BCNFは3NFよりゆるい形で、重複をわざと増やすためのものだとされているものだ
解答は 3 だよー。
BCNFは、3NFをさらに厳しくした形なのー。とてもよく似ているけれど、3NFと同じではなくて、BCNFのほうが一段きびしいよー。
選択肢1の「まったく同じ」、選択肢2の「明るさの設定」、選択肢4の「3NFよりゆるい・重複を増やす」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 同じではなく別もの |
| 2 | ✗ | 明るさの設定ではない |
| 3 | ✓ | BCNFは3NFより厳しい形 |
| 4 | ✗ | ゆるくない・重複は増やさない |
まとめ
押さえどころ
- 🔴 正規化の目的 = 同じデータの重複をなくし、直し忘れで食い違う更新異常を防ぐ。
- 🔴 段階と実用の目安 = 1NF→2NF→3NF→BCNF→4NF→5NFと進むほど厳しい。実用は3NFが目安(やりすぎは逆効果)。
- 🟡 BCNFと3NFの違い = BCNFは3NFをさらに厳しくした形。似ているが別もの。
次に学ぶ
執筆: SikakuQuest編集部