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

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

💡 データの「整理整頓・重複禁止」ルール
📌 このページのポイント
データベース正規化(Normalization) 非正規化テーブル 注文ID 顧客名 商品名 顧客住所 001 田中 ノートPC 東京 002 田中 マウス 東京 003 佐藤 キーボード 大阪 重複データあり 正規化 正規化後(テーブル分割) 注文ID 顧客ID 商品名 001 C01 ノートPC 002 C01 マウス 003 C02 キーボード 注文テーブル 顧客ID 顧客名 住所 C01 田中 東京 C02 佐藤 大阪 顧客テーブル FK 重複なし! 正規化のメリット - データの重複を排除 - 更新の矛盾を防止 - ストレージの節約 テーブルを分割して冗長性を排除し、データの一貫性を保つ手法
重複データをテーブル分割で解消し、一貫性を保つ正規化の流れ
ひよこ ひよこ

正規化ってダイエットみたいな名前だけど何するの?

ペンギン先生 ペンギン先生

うまい例えだね!データの「贅肉(重複)」を削るってイメージに近いかも。同じデータが複数の場所に書いてあると、修正が大変だし間違いのもとになるから、きちんと1か所にまとめる作業なんだ。

ひよこ ひよこ

例えばどういうとき重複が起きるの?

ペンギン先生 ペンギン先生

例えば「注文テーブル」に「商品名・商品価格・注文日・ユーザー名・ユーザーのメアド」を全部入れると、同じユーザーが10回注文するたびに名前とメアドが10回も保存されるんだ。それを「ユーザーテーブル」に分けるのが正規化だよ。

ひよこ ひよこ

第1・第2・第3正規形って何が違うの?

ペンギン先生 ペンギン先生

第1は「1つのセルに複数の値を入れない」、第2は「主キー全体に依存しない列を分ける」、第3は「主キー以外への依存を分ける」って感じで、段階的に重複を取り除いていくんだ。

ひよこ ひよこ

じゃあ第3正規形まで徹底すれば完璧?

ペンギン先生 ペンギン先生

ここがプロでも意見が分かれる難しいポイントで、正規化しすぎるとJOINが増えてクエリが遅くなるんだ。例えばECサイトの注文履歴には、あえて「商品名」を冗長に保存することがあるんだよ。商品名が後で変わっても、注文時点の名前を残したいからね。「どこまで正規化するか」はシステムの要件次第でトレードオフの判断が必要なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
正規化って出てきたら「重複をなくすためにテーブルを分割するDB設計のルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Normalization」 = 正規化・標準化
💬 数学の「正規形(Normal Form)」から来ており、第1〜第5正規形(1NF〜5NF)などの段階がある
← 用語集にもどる