正規化
要点
- 正規化とは、データの重複や不整合を防ぐために、テーブルを適切な単位に分割する設計の考え方です。
- 1つの表に情報を詰め込みすぎると、更新漏れや矛盾が起きやすくなります。
- 正規化された設計では、1つの情報は1か所にだけ持たせるのが基本です。
正規化とは何か
正規化とは、データベースのテーブルを「同じ情報を何度も繰り返し持たない」ように整理する設計手法のことです。データの重複を減らし、更新や削除をしたときに矛盾が生じないようにすることが目的です。
ぽち先生のヒントクラス名簿と生徒の個人情報を1枚の紙にまとめず、「クラス名簿(生徒の一覧)」と「生徒台帳(住所や連絡先などの詳細)」に分けて管理するイメージです。
正規化前の問題点
例えば、「注文」テーブルに顧客の名前や住所までまとめて書いてしまうと、次のような問題が起きます。
こうした問題は、1つの表に性質の異なる情報を詰め込みすぎることが原因で起こります。
正規化のイメージ:表を分ける
正規化では、「顧客に関する情報」と「注文に関する情報」のように、性質の異なるデータを別々のテーブルに分割します。
1枚の巨大な表
分割
テーブル
テーブル
顧客情報は customers テーブルに1回だけ記録し、orders テーブルからは外部キー(customer_id)で参照します。これにより、住所の変更は customers テーブルの1か所を直すだけで済みます。
具体例:注文データを分割する
正規化前は、注文のたびに顧客名・住所・商品名がすべて1行にまとまっていました。正規化後は、次のように役割ごとの表に分かれます。
customers顧客の名前・住所orders注文日・顧客IDproducts商品名・価格それぞれのテーブルは外部キーで結びついているため、必要なときはテーブルをつなぎ合わせて元の情報をまとめて取り出せます。
ぽち先生のヒント図書館の「利用者台帳」「蔵書台帳」「貸出記録」を別々の帳簿で管理するのと同じ発想です。誰が何を借りたかは、それぞれの帳簿を番号で突き合わせれば分かります。
正規化のメリットと注意点
正規化には多くの利点がありますが、やりすぎると別の課題も生まれます。バランスを意識することが大切です。
実務では、正規化を基本としつつ、検索速度を優先してあえて一部のデータを重複させる「非正規化」という判断をすることもあります。
正規化の段階:第1〜第3正規形
正規化には段階があり、順番に整理を進めていきます。ここまで説明してきた内容は、主に次の3段階に対応します。
実務では、これらの定義を厳密に暗記するよりも、「同じ情報が複数箇所に散らばっていないか」を意識してテーブルを分けていく感覚のほうが役立ちます。
まとめ
正規化は、性質の異なるデータを適切な単位のテーブルに分割し、重複や更新漏れ・矛盾を防ぐための設計の考え方です。テーブル設計の基礎となる重要な視点です。
関連トピック: