sg database system_planning data_modeling
まず結論
正規化とは、関係データベースでデータの重複を減らし、更新時の不整合を防ぐために、表を適切に分ける考え方です。
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正規形=主キー以外で決まる項目を分ける
迷ったときは、
正規化=重複を減らすために、表を役割ごとに分ける
と押さえると、選択肢を切り分けやすくなります。