Skip to the content.

最終更新日:2026年7月25日

まず結論

データベース正規化とは、同じ意味のデータを何度も保存する冗長性を減らし、更新・挿入・削除のときに起こる不整合を防ぐために、表を適切に分ける考え方です。

基本情報技術者試験では、まず第3正規形までを判断できれば十分です。

第1正規形
→ 1つのセルに1つの値

第2正規形
→ 複合主キーの一部だけで決まる項目を分ける

第3正規形
→ 主キー以外を経由して決まる項目を分ける

判断基準は次の一文です。

正規化は、表を細かくするためではなく、重複による更新時異状を防ぐために行う。

直感的な説明

次の注文表を考えます。

注文番号 顧客番号 顧客名 商品番号 商品名
1 C01 山田商事 P01 商品A
2 C01 山田商事 P02 商品B
3 C01 山田商事 P03 商品C

顧客名や商品名が何度も保存されています。

ここで「山田商事」が「山田株式会社」へ変わった場合、複数の行をすべて直さなければなりません。

1行目だけ更新した
↓
同じ顧客番号なのに顧客名が異なる
↓
データの不整合

このような問題を防ぐために、注文表・顧客表・商品表へ分けます。

注文表
→ 注文番号、顧客番号、商品番号

顧客表
→ 顧客番号、顧客名

商品表
→ 商品番号、商品名

すると、顧客名は顧客表の1か所だけ直せばよくなります。

定義・仕組み

正規化の中心は、一つの事実を一つの場所で管理することです。

正規化によって、次のような問題を減らせます。

  • 同じ情報を複数箇所で更新する必要がある
  • 更新漏れによって値が食い違う
  • 別の情報がないと登録できない
  • 行を削除すると必要な情報まで失われる

これらはまとめて、更新時異状と呼ばれます。

更新異状

同じ情報が複数行にあるため、すべて更新しなければならない問題です。

顧客名を3か所に保存
↓
1か所だけ更新漏れ
↓
値が不一致

挿入異状

別の情報が存在しないと、登録したい情報を追加できない問題です。

たとえば注文表だけで顧客情報を管理していると、まだ注文していない新規顧客を登録できないことがあります。

削除異状

ある行を削除したとき、残しておきたい情報まで失われる問題です。

たとえば顧客の最後の注文を削除すると、顧客情報まで消えることがあります。

正規化では、関数従属という考え方も使います。

関数従属とは、ある項目が決まると、別の項目も一意に決まる関係です。

商品番号 → 商品名

これは、商品番号が決まれば商品名も決まる、という意味です。

第1正規形

第1正規形では、1つの項目に1つの値だけを入れるようにします。

たとえば、次のような表は第1正規形ではありません。

顧客番号 電話番号
C01 090-xxxx、080-xxxx

1つのセルに複数の電話番号が入っているからです。

判断ワードは次のとおりです。

  • 繰返し項目
  • 複数値
  • 原子値
  • 1セル1値

第2正規形

第2正規形では、複合主キーの一部だけに依存する属性を分離します。

たとえば、主キーが次の組合せだとします。

注文番号 + 商品番号

このとき、商品名が商品番号だけで決まるなら、複合主キー全体には依存していません。

商品番号 → 商品名

この関係を部分関数従属といいます。

商品番号と商品名を商品表へ分けることで、第2正規形になります。

複合主キーの一部だけで決まる
→ 部分関数従属
→ 別表へ分ける

なお、主キーが1項目だけの場合、部分関数従属は発生しません。

第3正規形

第3正規形では、主キー以外の属性を経由して決まる属性を分離します。

たとえば、社員表に次の関係があるとします。

社員番号 → 部門番号 → 部門名

部門名は、社員番号から直接決まるのではなく、部門番号を経由して決まっています。

この関係を推移的関数従属といいます。

部門番号と部門名を部門表へ分けることで、第3正規形になります。

主キー
→ 非キー属性A
→ 非キー属性B

このつながりを分離
→ 第3正規形

このテーマは、基本情報技術者試験の「データベース」や「データベース設計」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。

科目Aでどう出る?

科目Aでは、正規化の目的や、表を第3正規形へ分解した結果を選ぶ問題として出題されます。

問題文・選択肢の表現 判断
1つのセルに複数の値がある 第1正規形を疑う
複合主キーの一部だけで属性が決まる 第2正規形を疑う
主キー以外の属性を経由して別の属性が決まる 第3正規形を疑う
冗長性を減らして更新時異状を防ぐ 正規化の目的
検索性能を上げるために重複を持たせる 非正規化を疑う

試験中は、次の順番で考えると安定します。

1. 1セル1値になっているか
2. 複合主キーの一部だけに依存していないか
3. 主キー以外を経由して決まっていないか
4. 目的が冗長性と更新時異状の防止か確認する

今回のように「第3正規形まで正規化する目的」を問われた場合は、次の選択肢を選びます。

冗長性を排除する
↓
更新時異状を回避する

一方、次の説明は外します。

  • 格納効率の向上だけを目的とする
  • 整合性制約を不要にする
  • ロック待ちを減らす
  • 必ず処理を高速化する

どんな場面で使う?

問題文では、正規化そのものの名前を問うより、データの重複や更新ミスを避ける設計として出てくることがあります。

同じ情報が何度も出ている
↓
更新ミスが起きそう
↓
何で決まる項目かを見る
↓
別表に分ける

表を分けた後も、参照に必要なキーは元の表に残します。

たとえば商品名を商品表へ分けても、注文表には商品表を参照する商品番号を残します。

正規化と整合性制約

正規化すると表が分かれるため、表同士を正しく結び付ける必要があります。

顧客表
↓ 主キー
顧客番号
↑ 外部キー
注文表

そのため、正規化によって整合性制約が不要になるわけではありません。

むしろ、表を分けた後は、主キー・外部キー・参照整合性が重要になります。

正規化と非正規化

正規化すれば、必ず処理が速くなるわけではありません。

表を分けると、必要な情報を取り出すときに結合処理が増える場合があります。

注文表
JOIN
顧客表
JOIN
商品表

読取り性能を優先する場面では、あえて一部の重複を許すことがあります。これを非正規化といいます。

比較 正規化 非正規化
主な目的 一貫性、保守性、更新時異状の防止 読取り性能の向上
データ重複 減らす 一部許容する
表の数 増えやすい 減る場合がある
結合処理 増える場合がある 減らせる場合がある
重複を減らして整合性を守る
→ 正規化

検索を速くするために重複を許す
→ 非正規化

よくある誤解・混同

誤解 正しい理解
商品名を商品表に分けたら、注文表から商品番号も消す 注文表には商品表を参照する商品番号を残す
第2正規形は、主キー以外で決まる項目を分ける それは第3正規形の考え方
第3正規形では、複合主キーの一部で決まる項目を見る それは第2正規形の考え方
正規化は表を細かくするほどよい 分割は手段であり、目的は更新時異状の防止
正規化すれば必ず高速になる 結合が増えて検索が複雑になる場合もある
表を分けると整合性制約が不要になる 外部キーなどによる整合性管理が必要

試験では、次の切り分けを残しておくと強いです。

1セル1値
→ 第1正規形

主キーの一部で決まる
→ 第2正規形

主キー以外を経由して決まる
→ 第3正規形

まとめ(試験直前用)

  • 正規化の目的は、冗長性を減らして更新時異状を防ぐこと
  • 更新時異状には、更新異状・挿入異状・削除異状がある
  • 第1正規形は、繰返し項目をなくして1セル1値にする
  • 第2正規形は、部分関数従属をなくす
  • 第3正規形は、推移的関数従属をなくす
  • 正規化は、処理速度やロック待ちの改善が主目的ではない
  • 表を分けた後も、外部キーなどの整合性制約が必要
  • 読取り性能のために重複を許す考え方が非正規化

試験直前には、次の一文を思い出してください。

第1は1セル1値、第2は主キーの一部、第3は主キー以外を経由。目的は更新時異状の防止。

© 2024-2026 stemtazoo. All rights reserved.