データベースの正規化は、データの冗長性を排除し、一貫性と効率性を確保するためのプロセスです。この記事では、第1正規形から第3正規形までの正規化の手順とその意義について詳しく解説しています。
第1正規形(1NF)
1つのセルには1つの値しか含まれないことが条件です。非正規形のテーブルからスカラ値のみを含むように変換します。
例:
- 非正規形: 複数の子供情報を1セルに持つ
- 第1正規形: 子供ごとに行を分ける
第2正規形(2NF)
第1正規形を満たし、部分関数従属を排除することが条件です。主キーが複数列から成る場合、その一部にのみ依存する列を分離します。
例:
- 部分関数従属: 会社コードと社員IDが主キーで、会社名が会社コードのみに依存
- 第2正規形: 会社情報を独立したテーブルに分割
第3正規形(3NF)
第2正規形を満たし、推移的関数従属を排除することが条件です。主キー以外の列が他の非キー列に依存しないようにします。
例:
- 推移的関数従属: 社員テーブルにおいて部署コードが部署名に依存
- 第3正規形: 部署情報を独立したテーブルに分割
正規化のメリットとデメリット
正規化の主なメリットは、データの一貫性を保ちやすくなることです。一方、テーブルの数が増えることで結合操作が多くなり、検索パフォーマンスが低下する可能性があります。これらのトレードオフを理解し、適切な正規化レベルを選択することが重要です。
正規化の実践例
非正規形のテーブル
社員ID | 社員名 | 子供
-------|--------|-----
1 | 田中 | 太郎,花子
2 | 鈴木 | 一郎
第1正規形
社員ID | 社員名 | 子供
-------|--------|-----
1 | 田中 | 太郎
1 | 田中 | 花子
2 | 鈴木 | 一郎
第2正規形
社員ID | 社員名
-------|--------
1 | 田中
2 | 鈴木
社員ID | 子供
-------|-----
1 | 太郎
1 | 花子
2 | 一郎
第3正規形
社員ID | 社員名 | 部署コード
-------|--------|---------
1 | 田中 | D01
2 | 鈴木 | D02
部署コード | 部署名
----------|-------
D01 | 営業
D02 | 開発
正規化の適用は、データベース設計において非常に重要です。データの冗長性を排除し、一貫性を確保することで、効率的なデータ管理が可能になります。