データベース設計における正規化
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にあるテーブルの分解が必要になる場合がある
- すべての関数従属性がキーに基づいていることを保証する