正規化(normalization)

同じデータが重複しないように、表を分けて整理するデータベースの設計手法。

もう少し詳しい説明

正規化は、同じことを何度も書かずに済むよう、表を分けて整理する設計のしかたです。

通販の注文履歴を思い浮かべてください。1行ごとに「注文番号・商品番号・商品名・価格」を全部書いていくとします。同じ商品を100人が買えば、同じ商品名が100行ぶん書かれます。

ここで商品名が変わったらどうなるでしょうか。100行すべてを直さなければなりません。1行でも直し忘れれば、直した行と直し忘れた行で名前が食い違います。どちらが正しいのか、後から見ても分かりません。

だから、注文の側には商品番号だけを持たせます。商品名は商品の一覧表に1回だけ書いておき、必要なときに番号で引く。名前が変わっても直すのは1か所で済みます。

「同じ事実は1か所にだけ書く」 — これが正規化の考え方のすべてです。

段階に分けて進める

整理は一度にやるのではなく、段階を踏みます。試験では第3正規形までが範囲です。

第1正規形は、1つのマス目に複数の値が入っている状態をなくし、表を平らにしたものです。「商品名:りんご、みかん、ぶどう」のように1マスに詰め込むのをやめ、1行1件に開きます。

第2正規形は、主キーが複数の列でできているとき、その一部だけで決まる項目を別の表に切り出したものです。「注文番号+商品番号」が主キーの表に商品名が入っていると、商品名は商品番号だけで決まってしまう。これを切り出します(部分関数従属の除去)。

第3正規形は、主キー以外の項目によって決まる項目を切り出したものです。社員番号が主キーの表に「部署番号」と「部署名」があると、部署名は部署番号で決まってしまう。これも切り出します(推移的関数従属の除去)。

「第何正規形か」の見分け方

判定問題は、この順に見ていけば機械的に答えが出ます。

  1. 1つのマスに複数の値が入っていないか → 入っていれば第1正規形より前
  2. 主キーの一部だけで決まる項目はないか → あれば第1正規形どまり
  3. 主キー以外で決まる項目はないか → あれば第2正規形どまり
  4. どれもなければ第3正規形

あえて分けないこともある

分けるほど重複は消えますが、そのぶんデータを取り出すときに表をつなぎ合わせる手間が増えます。参照が非常に多いシステムでは、速さを優先してあえて重複を残すこともあり、これを非正規化と呼びます。

正規化は目的ではなく手段だ、ということです。

覚え方:第1・第2・第3を「何を取り除いたか」で並べる

3つの正規形は、取り除いたものの名前で順に並べると混ざりません。

取り除くもの一言で
第1正規形1マスに複数の値繰り返しをなくす
第2正規形主キーの一部で決まる項目部分関数従属をなくす
第3正規形主キー以外で決まる項目推移的関数従属をなくす

**「くり返し → 部分 → 推移」の3語だけ順に言えるようにしておけば、条件を聞かれたときに逆算できます。 第2と第3の取り違えが一番多いので、「2は主キーの一部、3は主キー以外」**と、数字と“部”の字で結びつけておくと確実です。

試験ではこう出る

科目A(旧・午前)では「第◯正規形の条件はどれか」という定義問題と、具体的な表を示して「この表は第何正規形か」を判定させる問題の2パターンが定番です。応用情報の科目Bではデータベース分野の必答に近い頻度で登場し、与えられた業務要件からE-R図と正規化した表を設計させる形式で問われます。 「第何正規形か」を判定する問題は、繰返しがあるか(第1)、主キーの一部で決まる項目があるか(第2)、非キー項目で決まる項目があるか(第3)の順に見ていけば機械的に判定できます。

関連する用語

主キー
行を1つに特定する列。どの列がどの列に決まるかを、この主キーを軸に見る
外部キー
他の表の主キーを指す列。正規化で分け、外部キーでつなぎ直す
インデックス
検索を速くする索引。表の形を変える正規化とは目的が違う
非正規化
速さを優先して、あえて重複を残す設計。正規化の失敗ではなく意図した判断

ミニクイズ

第2正規形の条件として正しいものはどれか。

正解は 4番:第1正規形であり、非キー属性が主キーの一部だけに依存していない

主キーの一部にだけ依存する状態(部分関数従属)を取り除いたものが第2正規形です。非キー属性どうしの依存関係を除くのは第3正規形(推移的関数従属の除去)、繰返し項目がないのは第1正規形の条件です。

間違えた用語の復習リストを見る →

最終更新:2026-09-14