データベースの正規形(Normal Forms)は、リレーショナルデータベースの設計において、データの冗長性や異常を最小化し、データの一貫性を保つためのルールです。それぞれの正規形は、データ構造に特定の条件を課すことで、効率的なデータ管理を目指します。以下が主要な正規形の違いです。
1. 第一正規形 (1NF)
- 定義: 各列(フィールド)が単一の値(アトミックな値)を持つこと。
- ポイント:
- テーブルのすべての属性が単一の値であり、繰り返しグループや複数の値を持たないこと。
- 例:
{電話番号}のフィールドに複数の電話番号を持つ場合はNG。それぞれの電話番号を別の行に分ける必要がある。
2. 第二正規形 (2NF)
- 定義: テーブルが1NFに準拠し、かつ、すべての非キー属性が主キーの部分関数従属を持たないこと。
- ポイント:
- 主キーが複合キーである場合、その一部にのみ依存する非キー属性を排除すること。
- 例:
学生ID, コースID → 成績というテーブルで、学生ID → 名前のような、部分的に主キーに依存する関係がある場合、学生ID → 名前は別テーブルに分ける。
3. 第三正規形 (3NF)
- 定義: テーブルが2NFに準拠し、かつ、すべての非キー属性が主キーに対してのみ依存すること(他の非キー属性に依存しないこと)。
- ポイント:
- 非キー属性同士の推移的依存関係を排除する。
- 例:
社員ID → 部門ID → 部門名というような場合、社員ID → 部門IDと部門ID → 部門名に分けるべき。
4. ボイスコッド正規形 (BCNF)
- 定義: すべての決定因子が候補キーであること(候補キーとは、候補になり得るすべてのキーのこと)。
- ポイント:
- 3NFでは取り除けない異常が存在する場合、BCNFで解決されることがある。
- 例: テーブルに複数の候補キーが存在し、非主キー属性が複数の候補キーに依存している場合、その依存関係を解消する。
5. 第四正規形 (4NF)
- 定義: テーブルがBCNFに準拠し、かつ、多重従属を持たないこと。
- ポイント:
- 多重従属とは、1つの属性が2つ以上の独立した属性に依存している場合。
- 例:
学生ID → {コース, 趣味}のような場合、コースと趣味は独立した属性であり、多重従属を解消するために別のテーブルに分ける。
6. 第五正規形 (5NF)
- 定義: テーブルが4NFに準拠し、かつ、ジョインによってのみ再構築可能な場合にのみテーブルが分割されていること。
- ポイント:
- データが複数のテーブルに分割された場合、そのテーブルが必ず正しく再結合できるようにする。
- 例: テーブルが細かく分割されすぎてジョインでしか元の情報が得られない場合、不要な分割を避ける。
まとめ
- 1NF: 各列がアトミックな値を持つ
- 2NF: 1NF + 非キー属性が主キーの部分に依存しない
- 3NF: 2NF + 非キー属性が他の非キー属性に依存しない
- BCNF: すべての決定因子が候補キー
- 4NF: 多重従属を排除
- 5NF: ジョインによる再構築が可能な分割のみ










