テクノロジ系

データベース正規化 — 重複をなくしてスッキリ整理する

導入

同じ住所や商品名が何度もデータベースに登録されていると、更新のたびに修正箇所が増えてミスが起きやすくなります。こうした「データの重複」をなくして管理しやすい構造に整理するのが、データベース正規化の考え方です。

なぜ重要か

正規化はデータベース設計の根幹であり、ITパスポートのテクノロジ系分野で毎回といってよいほど出題されるテーマです。正規化が不十分なテーブルでは、1件のデータを更新しただけで関連する複数の行にも修正が必要になり、修正漏れが生じると矛盾したデータが残ってしまいます。これを「更新時異常」と呼び、正規化はこうした異常を体系的に取り除く手段として位置づけられています。

また、試験では第1・第2・第3の各正規形の名称と、それぞれで排除する依存関係を正確に対応させる問題が繰り返し出題されます。「どの正規形か」「どの手順で進めるか」という順序感覚まで身につけておくと、実務での設計レビューにも直接役立てられます。

くわしく知ろう

正規化とは、データベースのテーブル内にある冗長なデータや矛盾を排除し、更新・追加・削除の操作を一貫して行えるように構造を整える設計手法のことです。正規化を段階的に進めることで、データの重複が減り、整合性を保ちやすくなります。

第1正規化は、テーブルの各セルに複数の値が入った「繰り返しグループ」を排除するステップです。たとえば1つのセルに「りんご、バナナ」と複数の商品名が入っている場合、それぞれを別の行に分けることで第1正規形(1NF)になります。「1セルに1値」という原則がここで確立されます。

第2正規化は、主キーの一部だけに依存している列(部分関数従属)を別テーブルに切り出すステップです。複合主キーを持つテーブルで問題になりやすく、主キー全体に依存する形に整理することを第2正規形(2NF)と呼びます。単一列が主キーの場合は部分関数従属が起こらないため、このステップは実質スキップとなります。

第3正規化は、主キー以外の列同士の依存関係(推移的関数従属)を排除するステップです。「社員ID→部門コード→部門名」のように、キーを経由して別の列が決まる関係を切り出し、別テーブルにまとめることで第3正規形(3NF)になります。一般的な業務システムでは、第3正規形まで整えておくことが標準とされています。

正規化のデメリットとして、テーブル数が増えるため、データを取得する際に複数テーブルを結合する(JOIN)処理が必要になり、検索パフォーマンスが低下することがある点も押さえておく必要があります。

具体例で理解する

たとえば「注文テーブル」に顧客の住所を都度書き込んでいると、引越しのたびに複数行を修正する必要があります。住所を「顧客テーブル」として切り出して参照する形にすると、1か所を直すだけで済むようになります。これが正規化によるメリットの典型例です。一方、テーブルを分けすぎると、注文一覧を表示するたびに顧客テーブルとの結合(JOIN)が必要になり、処理が複雑になるというトレードオフも生じます。

試験での出題パターン

【パターン1:各正規形の名称と排除する依存関係を対応させる問題】

「繰り返しグループを排除する正規形はどれか」「推移的関数従属を排除するのはどのステップか」という形式で問われます。第1・第2・第3の順序と、それぞれで排除する依存関係(繰り返しグループ→部分関数従属→推移的関数従属)をセットで記憶しておくことが重要です。

【パターン2:正規化の目的・メリットを選ぶ問題】

「正規化の主な目的として適切なものはどれか」という問いに対し、「データの暗号化」「検索速度の向上」「テーブルの統合」といった誤答選択肢の中から「データの冗長性排除と整合性確保」を選ぶ形式です。正規化はテーブルを分割する作業であり、統合ではない点が問われやすいポイントです。

【パターン3:正規化のデメリットを問う問題】

「正規化を進めた場合に生じる問題として最も適切なものはどれか」という出題もあります。テーブルが増えることでJOINが増加し、検索パフォーマンスへの影響が生じる可能性があることを答えられるようにしておいてください。

よくある間違い・紛らわしいポイント

【第1・第2・第3正規化の順序を混同するミス】

「部分関数従属を排除するのが第3正規化」「推移的関数従属が第2正規化」と順序を入れ替えてしまう誤りが多く見られます。必ず「繰り返し→部分→推移」の順で覚えるようにしてください。語呂として「く・ぶ・い(繰り返し・部分・移推)」と頭文字で整理する方法も有効です。

【部分関数従属が起きる条件の誤解】

第2正規化で排除する「部分関数従属」は、主キーが2列以上の複合キーであるときにのみ発生します。主キーが1列の場合は部分関数従属が起きないため、「第2正規形は複合主キーのテーブルでのみ意味を持つ」という点を覚えておいてください。

【正規化とインデックスの混同】

「正規化すると検索が速くなる」と思い込むケースがありますが、正規化の目的はあくまで冗長性の排除と整合性の確保です。検索速度の改善はインデックス(索引)の設計が担う別の話であり、混同しないように注意が必要です。

まとめ・試験ポイント

  • 正規化=テーブルの冗長性を排除して整合性を高める設計手法
  • 第1正規化=繰り返しグループ(複数値)の排除
  • 第2正規化=部分関数従属の排除(複合主キーの場合に注意)
  • 第3正規化=推移的関数従属の排除(非キー列間の依存を切り出す)
  • 正規化のデメリット=テーブルが増えるためJOINが必要になりパフォーマンスに影響することがある
  • 試験では「どの正規形か」「正規化のメリット」がよく問われる

学習した内容を試験形式で確認しよう。ITパスポート入門試験100問に挑戦できます。

入門試験100問に挑戦する