【IPA】データベースの正規化(第一から第三への変更例)

この記事は約3分で読めます。

第一正規形 (1NF) から第三正規形 (3NF) までの変更例をステップごとに具体的に説明します。

1. 非正規形の表

まず、非正規形 (未正規化) の表は、繰り返しのグループや複数の値が1つのセルに入っていることが特徴です。

非正規形の例:

ID名前電話番号趣味
1佐藤太郎090-1111-2222, 080-3333-4444サッカー, 料理
2鈴木一郎090-5555-6666音楽
  • 「電話番号」や「趣味」列には複数の値が含まれているため、非正規形です。

2. 第一正規形 (1NF)

第一正規形 (1NF) では、各列に1つの値しか持たないようにし、繰り返しのグループを解消します。複数の値がある場合は、行を分割します。

1NFの例:

ID名前電話番号趣味
1佐藤太郎090-1111-2222サッカー
1佐藤太郎080-3333-4444料理
2鈴木一郎090-5555-6666音楽
  • 各セルが単一の値になっています。

3. 第二正規形 (2NF)

第二正規形 (2NF) では、1NFを満たしつつ、部分関数従属を取り除きます。つまり、複合キーの一部に依存する列を分離します。ここで、複合キー(ID と 電話番号)の一部である「ID」が「名前」に関して完全関数従属しており、「電話番号」には関係ないため、表を分割します。

2NFの例:

1. 「個人情報」テーブル
ID名前
1佐藤太郎
2鈴木一郎
2. 「連絡先」テーブル
ID電話番号
1090-1111-2222
1080-3333-4444
2090-5555-6666
3. 「趣味」テーブル
ID趣味
1サッカー
1料理
2音楽
  • 「名前」は「ID」に完全依存しているため、「個人情報」テーブルに分離されました。
  • 「電話番号」と「趣味」は「ID」に依存していますが、相互に依存しないので別々のテーブルに分けました。

4. 第三正規形 (3NF)

第三正規形 (3NF) では、2NFを満たしつつ、推移的関数従属を取り除きます。推移的従属とは、ある列が主キーに依存している他の列に依存している場合です。今回の例では、「名前」は直接「ID」に依存しており、推移的従属がないため、2NFのままで3NFも満たしています。

ただし、例として住所を追加して推移的従属を説明します。

2NFから3NFへの変更例:

もし「住所」が名前に依存している場合、次のような表になります:

2NF (推移的従属あり)
ID名前住所
1佐藤太郎東京都
2鈴木一郎大阪府

この場合、「住所」は「ID」ではなく「名前」に依存しているため、推移的従属が発生しています。これを解消するために、住所を別のテーブルに分けます。

3NF (推移的従属を解消)
ID名前
1佐藤太郎
2鈴木一郎
名前住所
佐藤太郎東京都
鈴木一郎大阪府

最終的なまとめ

  1. 非正規形 → 複数の値が1つのセルに入っている。
  2. 第一正規形 (1NF) → 各セルに単一の値しか入れない。
  3. 第二正規形 (2NF) → 部分関数従属を解消して、複合キーの一部に依存している列を分離。
  4. 第三正規形 (3NF) → 推移的従属を解消し、列が直接主キーにのみ依存するように分割。

この流れで正規化を進めることで、データの冗長性を減らし、更新時の異常が起こりにくい設計ができます。