データベース正規化とは

IT

正規化とは

正規化(Normalization) とは、
データベースの冗長性(重複)を減らし、不整合や更新ミスを防ぐための設計手法です。

データ構造を段階的に整えていくことで、
「一貫性・保守性・拡張性」に優れたデータベースを作ることができます。


第1正規形(1NF):繰り返し要素の排除

● ルール

  • 各列(カラム)は**1つの値のみ(原子値)**を持つ。
  • 同じ意味の列を複数持たない。

❌ 非正規化の例:

顧客ID顧客名購入商品
C001田中太郎ノートPC, マウス
C002鈴木花子スマートフォン

→ 「購入商品」列が**複数値(カンマ区切り)**を含む。

✅ 第1正規形の例:

顧客ID顧客名商品名
C001田中太郎ノートPC
C001田中太郎マウス
C002鈴木花子スマートフォン

→ 各セルが単一値になり、1NFを満たす


第2正規形(2NF):部分関数従属の排除

● ルール

  • 主キーが複合キー(2つ以上の列)である場合、
    その一部の列に依存するデータを分離する。

❌ 第1正規形の例:

顧客ID商品ID顧客名商品名単価
C001P001田中太郎ノートPC100000
C001P002田中太郎マウス2000

→ 「顧客名」は「顧客ID」にのみ依存しており、
 主キー(顧客ID+商品ID)の一部に依存している。

✅ 第2正規形の例:

顧客マスタ

顧客ID顧客名
C001田中太郎
C002鈴木花子

商品マスタ

商品ID商品名単価
P001ノートPC100000
P002マウス2000

購入履歴

顧客ID商品ID
C001P001
C001P002
C002P002

→ 部分依存が排除され、冗長性がなくなった。


第3正規形(3NF):推移的関数従属の排除

● ルール

  • 主キー以外の列が、他の非キー列に依存してはいけない。

❌ 第2正規形の例:

商品ID商品名カテゴリIDカテゴリ名
P001ノートPCC01コンピュータ
P002マウスC01コンピュータ
P003スマートフォンC02モバイル

→ 「カテゴリ名」は「カテゴリID」に依存している(推移的従属)。

✅ 第3正規形の例:

商品マスタ

商品ID商品名カテゴリID
P001ノートPCC01
P002マウスC01
P003スマートフォンC02

カテゴリマスタ

カテゴリIDカテゴリ名
C01コンピュータ
C02モバイル

→ 推移的従属を分離し、更新・削除時の不整合を防止


第4正規形(4NF):多値従属の排除

● ルール

  • 主キーに対して、複数の独立した繰り返し属性を持つ場合は分離する。
  • 「一つの主キーに対し、複数の異なる多対多関係」があるケースが対象。

❌ 第3正規形の例:

顧客ID商品ID連絡先
C001P001080-1111-2222
C001P001090-3333-4444
C001P002080-1111-2222
C001P002090-3333-4444

→ 顧客IDごとに「複数の商品」と「複数の連絡先」が独立して存在。
 組み合わせが不必要に膨大になっている。

✅ 第4正規形の例:

顧客商品テーブル

顧客ID商品ID
C001P001
C001P002

顧客連絡先テーブル

顧客ID連絡先
C001080-1111-2222
C001090-3333-4444

→ 「商品」と「連絡先」は独立した関係なので分離。
 これで多値従属が解消され、データが簡潔になる。


第5正規形(5NF):結合従属の排除

● ルール

  • すべての結合が主キーに基づいて復元可能であること。
  • 不必要な結合や冗長な関係を排除する。
  • 3つ以上のテーブル間に成り立つ複雑な多対多関係を最小単位に分割。

❌ 第4正規形の例:

商品ID仕入先ID配送業者ID
P001S01D01
P001S02D01
P001S01D02

→ 「商品」「仕入先」「配送業者」の関係が混在しており、
 どの組み合わせが有効なのか曖昧。

✅ 第5正規形の例:

商品-仕入先テーブル

商品ID仕入先ID
P001S01
P001S02

商品-配送業者テーブル

商品ID配送業者ID
P001D01
P001D02

仕入先-配送業者テーブル(必要な場合)

仕入先ID配送業者ID
S01D01
S02D02

→ 各関係を独立して保持し、
 不要な結合や不整合を防止。これが第5正規形です。


正規化まとめ

正規形主な目的対応する従属関係設計上の効果
第1正規形繰り返しの排除繰り返し属性データを1件1行に整える
第2正規形部分関数従属の排除部分関数従属主キーの一部に依存する項目を分離
第3正規形推移的従属の排除推移的関数従属非キー属性間の依存を排除
第4正規形多値従属の排除多値従属独立した繰り返しを分離
第5正規形結合従属の排除結合従属不要な結合・冗長関係を除去

補足:実務上のポイント

  • 多くの業務システムでは、第3正規形までで十分。
  • 第4・第5正規形は、分析DBやマスタ統合などで役立つ。
  • 過度な正規化はJOINが増えパフォーマンス低下を招くため、
    場合によっては意図的に非正規化する設計も必要。

Midjourneyプロンプト

Data being inserted into a database, digital data flow, glowing binary streams, futuristic interface, server room environment, precision, focused and technical mood, isometric composition, cool blue lighting, –no text::5 –ar 16:9 –q 2 –s 750

コメント

タイトルとURLをコピーしました