---
title: "正規化とは？データの重複を減らして整合性を保つ考え方【SG試験】"
description: "正規化は、関係データベースでデータの重複や更新時の不整合を減らすために、表を適切に分ける考え方です。第1正規形・第2正規形・第3正規形の違い、主キーと関数従属の見方、SG試験で狙われる表設計のひっかけを整理します。科目Aの用語理解と科目Bのケース判断で迷いやすい表現も確認します。"
last_modified_at: "2026-05-06"
canonical_url: "https://stemtazoo.github.io/sg/database-normalization/"
section: "sg"
---

## まず結論

正規化とは、**関係データベースでデータの重複を減らし、更新時の不整合を防ぐために、表を適切に分ける考え方**です。

SG試験では、正規化を「データを暗号化すること」や「データを圧縮すること」と混同しないことが大切です。

正規化で見るのは、主に次の点です。

- 同じデータが何度も出ていないか
- 1つのセルに複数の値が入っていないか
- 主キーと関係のない項目が混ざっていないか
- 更新・追加・削除のときに不整合が起きないか

つまり、正規化は**データをきれいに分けて管理しやすくする設計**です。

---

## 直感的な説明

正規化は、**ぐちゃっとした一覧表を、役割ごとに分ける作業**と考えると分かりやすいです。

例えば、注文一覧に次の情報が全部入っているとします。

- 注文ID
- 顧客名
- 顧客住所
- 商品名
- 商品価格
- 注文日

この形だと、同じ顧客が何度も注文した場合、顧客名や住所が何度も出てきます。

もし顧客住所が変わったら、すべての注文行を修正しなければなりません。

修正漏れがあると、同じ顧客なのに住所が複数あるように見えてしまいます。

そこで、

- 顧客表
- 商品表
- 注文表
- 注文明細表

のように分けて、重複を減らします。

これが正規化のイメージです。

---

## 定義・仕組み

正規化では、表を段階的に整理します。

SG試験では、まず第1正規形、第2正規形、第3正規形の大まかな違いを押さえておくと安心です。

| 段階 | 整理すること | 判断ポイント |
|---|---|---|
| 第1正規形 | 繰り返し項目をなくす | 1つのセルに複数値を入れない |
| 第2正規形 | 主キーの一部だけに依存する項目を分ける | 複合キーの一部だけで決まる項目を分ける |
| 第3正規形 | 主キー以外に依存する項目を分ける | 主キー以外で決まる項目を分ける |

細かい理論を深追いするより、試験では**何に依存している項目か**を見ることが大切です。

---

## 第1正規形とは

第1正規形は、**繰り返し項目や複数値をなくす**段階です。

例えば、1つのセルに次のような値が入っている状態は扱いにくいです。

| 注文ID | 商品名 |
|---|---|
| O001 | りんご、みかん、バナナ |

このように1つの項目に複数の商品が入っていると、検索や集計がしにくくなります。

第1正規形では、1つのセルには1つの値が入るように整理します。

| 注文ID | 商品名 |
|---|---|
| O001 | りんご |
| O001 | みかん |
| O001 | バナナ |

まずは、**1項目1値**にするイメージです。

---

## 第2正規形とは

第2正規形は、**複合キーの一部だけで決まる項目を別の表に分ける**段階です。

例えば、注文明細表で、主キーが「注文ID」と「商品ID」の組み合わせだとします。

| 注文ID | 商品ID | 商品名 | 数量 |
|---|---|---|---|
| O001 | P001 | りんご | 3 |
| O001 | P002 | みかん | 2 |

このとき、数量は「注文ID」と「商品ID」の組み合わせで決まります。

しかし、商品名は「商品ID」だけで決まります。

つまり、商品名は複合キー全体ではなく、一部である商品IDだけに依存しています。

この場合、商品名は商品表に分けた方がよいです。

| 商品ID | 商品名 |
|---|---|
| P001 | りんご |
| P002 | みかん |

第2正規形では、**主キーの一部だけで決まる項目を分ける**と考えると分かりやすいです。

---

## 第3正規形とは

第3正規形は、**主キー以外の項目に依存する項目を分ける**段階です。

例えば、注文表に次の項目があるとします。

| 注文ID | 顧客ID | 顧客名 | 注文日 |
|---|---|---|---|
| O001 | C001 | 山田さん | 2026-04-01 |
| O002 | C001 | 山田さん | 2026-04-02 |

この表の主キーは注文IDです。

しかし、顧客名は注文IDで決まるというより、顧客IDで決まります。

つまり、主キーではない顧客IDに依存しています。

この場合、顧客名は顧客表に分けます。

| 顧客ID | 顧客名 |
|---|---|
| C001 | 山田さん |

第3正規形では、**主キー以外で決まる項目を分ける**と押さえるとよいです。

---

## どんな場面で使う？

正規化は、関係データベースを設計するときに使われます。

特に、次のような目的があります。

- データの重複を減らす
- 更新時の不整合を防ぐ
- 追加・削除時の不都合を防ぐ
- データを管理しやすくする
- 主キー・外部キーによる関係を整理する

例えば、顧客住所を注文表に毎回保存していると、住所変更のたびに多くの行を修正する必要があります。

正規化して顧客表に住所をまとめておけば、顧客表の1か所を直すだけで済みます。

---

## 正規化で防ぎたい不都合

正規化では、次のような不都合を減らすことを考えます。

| 不都合 | 内容 | 例 |
|---|---|---|
| 更新時の不整合 | 同じ情報を複数箇所で直す必要がある | 住所変更の修正漏れ |
| 追加時の不都合 | 必要な情報だけを登録できない | 商品だけを先に登録できない |
| 削除時の不都合 | 消したくない情報まで消える | 最後の注文を消すと顧客情報も消える |

SG試験では、正規化の目的として、**重複排除と整合性の確保**が狙われやすいです。

---

## よくある誤解・混同

### 誤解1：正規化はデータを暗号化すること

正規化は暗号化ではありません。

暗号化は、第三者に内容を読まれにくくするための技術です。

正規化は、データベースの表を整理して、重複や不整合を減らすための設計です。

---

### 誤解2：正規化すれば必ず処理が速くなる

正規化すると、データの重複は減ります。

ただし、表が分かれるため、検索時に表を結合する必要が増えることがあります。

そのため、正規化は必ず処理速度を上げるものではありません。

処理性能を重視して、あえて一部の重複を許す設計をすることもあります。

これを非正規化といいます。

---

### 誤解3：正規化は表を1つにまとめること

正規化は、表を1つにまとめることではありません。

むしろ、重複や依存関係を整理するために、表を適切に分けることが多いです。

「まとめる」よりも「役割ごとに分ける」と考えると分かりやすいです。

---

## ER図・主キー・外部キーとの関係

正規化は、ER図や主キー・外部キーとつながっています。

| 用語 | 正規化との関係 |
|---|---|
| ER図 | エンティティ同士の関係を整理する |
| 主キー | 表の1行を一意に識別する |
| 外部キー | 分けた表同士を関係づける |
| 正規化 | 重複や不整合を減らすように表を分ける |

正規化で表を分けたあと、それらの表を主キー・外部キーでつなぎます。

その関係を整理するために、ER図が役立ちます。

---

## まとめ（試験直前用）

正規化は、**データの重複を減らし、更新時の不整合を防ぐために表を整理する考え方**です。

試験直前は、次の3点で判断しましょう。

- **第1正規形＝繰り返し項目をなくす**
- **第2正規形＝主キーの一部だけで決まる項目を分ける**
- **第3正規形＝主キー以外で決まる項目を分ける**

迷ったときは、

**正規化＝重複を減らすために、表を役割ごとに分ける**

と押さえると、選択肢を切り分けやすくなります。
