正規化(Normalization)とは、データベースの設計において、データの重複や矛盾が起きにくいよう、情報を整理してテーブルを分割していく手法のことです。同じ情報をあちこちに重複して持たないようにすることで、後々の管理や更新をしやすくします。
現実世界に例えると、正規化は持ち物を用途ごとに整理整頓する作業のようなものです。文房具や書類があちこちに散らばっていると、どこに何があるか分からなくなりますが、種類ごとに引き出しを分けておけば、必要な物をすぐに見つけられ、片づけも楽になります。
正規化を行わない場合の問題
ひとつの表に情報を詰め込みすぎると、同じ顧客の名前や住所が何行にもわたって重複して記録されるような状態になりがちです。この状態で住所が変わった場合、該当するすべての行を修正しなければならず、修正漏れによる矛盾が起きやすくなります。
正規化の段階
| 段階 | 内容 |
|---|---|
| 第1正規形 | ひとつのマス目に複数の値を入れず、単一の値だけにする |
| 第2正規形 | 主キーの一部だけで決まる情報を、別の表に分ける |
| 第3正規形 | 主キーに関係ない項目同士の依存関係を取り除く |
正規化のメリットとデメリット
正規化を進めると、データの重複が減り、矛盾の起きにくい整った構造になります。一方で、表が細かく分かれる分、情報を取り出す際に複数の表を結合する必要が生じ、処理がやや複雑になる、あるいは遅くなる場合もあります。
あえて崩す「非正規化」
大量のデータを高速に取り出したい場合など、あえて重複を許容してひとつの表にまとめる「非正規化」という手法が使われることもあります。整った構造と、処理速度のどちらを優先するかは、システムの用途によって使い分けられます。
正規化の具体的なイメージ
例えば、注文情報の表に顧客の氏名や住所をそのまま記録していると、同じ顧客が何度注文しても、そのたびに氏名や住所が繰り返し記録されてしまいます。顧客情報を別の表に分け、注文の表からは顧客番号だけを参照するようにすれば、氏名や住所は一箇所にまとめられ、変更があってもその一箇所を直すだけで済みます。
正規化を意識する場面
データベースを新しく設計する際には、あとから項目が増えたり、扱うデータの量が増えたりしても崩れにくい構造を意識して正規化を行うことが大切です。設計の初期段階でこの整理を怠ると、後になって修正するのが難しくなる場合があります。
あわせて知っておきたい用語
- RDB(リレーショナルDB):
データを表形式で管理し、表同士を関連付けて扱うデータベースです。 - 主キー:
表の中で、1件のデータを一意に特定するための項目です。 - 外部キー:
別の表の主キーを参照し、表同士を関連付けるための項目です。 - テーブル:
データを行と列で管理する、表の形をした構造です。 - 非正規化:
処理速度を優先し、あえて情報の重複を許容する設計手法です。 - ER図:
表同士の関連付けを図で表した、データベース設計に使われる図です。

コメント