正規化(第1〜第3正規形) せいきか
第1正規形第2正規形第3正規形関数従属冗長性テーブル設計
正規化(第1〜第3正規形)について教えて
簡単に言うとこんな感じ!
正規化は「データをスッキリ整理するルール」だよ!1つのセルに複数の値を詰め込んだり、同じデータが何か所にも重複したりするのを段階的に解消していく手順なんだ。これをやると「一か所直せば全部直る」清潔なDB設計になるんだ!第1→第2→第3と段階を踏んで進めていくよ!
正規化とは
正規化(Normalization)とは、リレーショナルデータベースのテーブル設計において、データの重複(冗長性)を排除し、更新異常を防ぐための設計手法です。E.F.コッドが1970年代に提唱した理論に基づき、テーブルを段階的に整理していきます。
正規化が不十分なテーブルでは、更新異常と呼ばれる問題が発生します。たとえば「取引先の住所が5つのレコードに重複して入っている」場合、住所変更時に5箇所全部を更新しなければならず、1か所だけ更新すると矛盾が生じます(更新異常)。また新規に取引先を登録する際、発注がないと保存できない(挿入異常)、最後の発注を削除すると取引先情報も消える(削除異常)といった問題も生じます。
正規化は第1正規形(1NF)→第2正規形(2NF)→第3正規形(3NF)と段階的に進めます。実務では3NFまで適用するのが一般的です。さらに高度なBoyce-Codd正規形・第4・第5正規形もありますが、通常は3NFで十分な整合性が確保できます。
3段階の正規化
| 正規形 | 条件 | 解消される問題 |
|---|---|---|
| 第1正規形(1NF) | 各セルに1つの値のみ(繰り返しグループを排除) | 「商品1,商品2,商品3」を1セルに入れるのを禁止 |
| 第2正規形(2NF) | 1NF + 非キー属性が主キー全体に関数従属 | 複合主キーの一部だけに依存するカラムを別テーブルへ |
| 第3正規形(3NF) | 2NF + 非キー属性間の推移的関数従属を排除 | 「郵便番号→住所」のような間接依存を別テーブルへ |
歴史と背景
- 1970年:E.F.コッドが「大規模共有データバンクのデータのリレーショナルモデル」論文を発表
- 1971年:コッドが第1・第2・第3正規形を定義。RDB設計の理論的基盤となる
- 1974年:Boyce-Codd正規形(BCNF)がより厳密な正規形として定義
- 1977年:第4正規形(多値従属の排除)が定義
- 1979年:第5正規形(結合従属の排除)が定義
- 1980年代〜現在:実務では第3正規形が標準として定着。過度な正規化は避けるトレードオフも認識
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| E.F.コッド論文 (1970) | リレーショナルモデルと正規化理論の原典 |
| ISO/IEC 9075 (SQL標準) | 正規化されたテーブル設計を前提とするSQL仕様 |