【せいきか(でーたべーす)】

正規化(データベース) とは?

最終更新:
💡 同じ事実は、適切な場所にまとめよう

リレーショナルデータベースで、項目同士の依存関係に沿って表を整理する設計手法。不要な重複と、追加・更新・削除に伴う不整合を減らすために使う。

📌 このページのポイント
正規化:同じ事実をまとめる注文ごとに、顧客の現在の住所を保存注文ID  顧客ID  現在の住所001    A    東京002    A    東京同じ住所をまとめる顧客の表顧客ID 現在の住所A   東京注文の表注文ID 顧客ID001   A002   A顧客IDで、二つの表を関連付けるIDでつなぎ、住所の変更を一か所にまとめよう
顧客の現在の住所をまとめる設計例。注文時に確定した配送先は別の事実として扱います。
ひよこ ひよこ
正規化って、重複する値を全部消すこと?
ペンギン先生 ペンギン先生
同じ事実を何か所にも書いて、変更が食い違うのを減らす設計だよ。例えば注文ごとに顧客の現在の住所を書くと、変更漏れが起こりやすい。顧客の表に住所をまとめ、注文の表から顧客IDで参照する形にできるんだ。
ひよこ ひよこ
顧客IDが何度も出たら、まだ重複では?
ペンギン先生 ペンギン先生
IDが複数の注文に出るのは、その注文が同じ顧客に属することを表しているよ。正規化は「同じ値が二度出たら禁止」ではないんだ。どの項目が何によって決まるかを見て、別の事実を一つの表に詰め込まないようにするんだね。
ひよこ ひよこ
第1・第2・第3正規形は、どう覚える?
ペンギン先生 ペンギン先生
入口では、第1は繰り返す項目や値の詰め込みを整理、第2は組み合わせたキーの一部だけで決まる項目を分ける、第3はキー以外の項目を経由して決まる項目を整理、と考えよう。これは基本の説明で、厳密な判定では候補キーや関数従属性を確認するよ。
ひよこ ひよこ
注文時の住所も、顧客の表だけにする?
ペンギン先生 ペンギン先生
現在の住所と、注文時に配送先として確定した住所は、違う事実だよ。過去の注文を残すなら、その時点の情報を記録する設計が必要になる。分割やJOINの数だけで良し悪しを決めず、何を記録する表かと実際の検索を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「正規化」って出てきたら「同じ事実を適切な表にまとめ、更新の食い違いを減らす設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Normalization」 = 正規形に沿って整理すること
💬 このページではデータベースの設計を扱うよ。機械学習などで数値の尺度をそろえる正規化とは、文脈が違うんだ。

参考資料

← 用語集にもどる