Table of Contents

データベース設計における正規化

正規化とは、データベース内のデータを体系的に整理し、冗長性を最小限に抑え、データの整合性を向上させるアプローチです。このプロセスでは、一連の正規形に基づいてテーブルをより小さく、よく構造化されたテーブルに分解します。

主な正規形は以下の通りです:

  • 非正規化
  • 第1正規形(1NF)
  • 第2正規形(2NF)
  • 第3正規形(3NF)
  • 第4正規形(4NF)
  • 第5正規形(5NF)
  • Boyce-Codd正規形(BCNF)

正規化のプロセスは通常、これらのステップに従います。実際には、データの整合性とパフォーマンスのバランスを取るため、データベースは第3正規形(3NF)またはBoyce-Codd正規形(BCNF)まで正規化されることが多いです。

非正規化

  • 正規化されたデータベースに意図的に冗長性を導入する
  • 結合の回数を減らすために複数のテーブルからデータを結合する
  • 複雑な結合を避けることでクエリのパフォーマンスを向上させる
  • データの整合性とストレージ容量をトレードオフとして、より高速な読み取り操作を実現する
  • データウェアハウスやレポーティングシステムで一般的に使用される
  • 冗長データの同期を保つために慎重なメンテナンスが必要

第1正規形(1NF)

  • 各列はアトミック(分割不可能)な値のみを含む
  • 単一の列内に繰り返しグループや配列がない
  • 各行は一意である必要がある(通常は主キーによって強制される)
  • 各列は一意の名前を持つ必要がある
  • 行と列の順序は関係ない
  • 他のすべての正規形の基礎を形成する

第2正規形(2NF)

  • すでに第1正規形(1NF)である必要がある
  • 主キーに対する部分的な依存関係を排除する
  • すべての非キー属性は、主キーの一部だけでなく、主キー全体に依存する必要がある
  • 複合主キーを持つテーブルにのみ適用される
  • 部分関数従属性によるデータの冗長性を防ぐ
  • 部分的に依存する属性を分離するためにテーブルを分割する必要がある

第3正規形(3NF)

  • すでに第2正規形(2NF)である必要がある
  • 非キー属性間の推移的依存関係を排除する
  • 非キー属性は、他の非キー属性ではなく、主キーにのみ依存する必要がある
  • 間接的な依存関係によって引き起こされる更新異常を防ぐ
  • データの冗長性をさらに削減する
  • ほとんどのデータベースは少なくともこのレベルの正規化を目指す

Boyce-Codd正規形(BCNF)

  • 第3正規形(3NF)のより厳格なバージョン
  • すべての決定子は候補キーである必要がある
  • 3NFに存在する可能性のある特定の異常に対処する
  • テーブルに複数の重複する候補キーがある場合に特に重要
  • すでに3NFにあるテーブルの分解が必要になる場合がある
  • すべての関数従属性がキーに基づいていることを保証する