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