0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベースの正規化について(第1正規化~第3正規化)

Posted at

正規化について


第1正規化 (1NF)

ポイント

  • 繰り返しの属性を排除する
  • テーブルは同じカラムを複数持てない

例1) 繰り返しの列を分割して行にする方法

🔹 第1正規化前のテーブル

学生ID 氏名 電話番号1 電話番号2
1 佐藤太郎 090-1234-5678 080-1111-2222
2 鈴木花子 070-3333-4444 NULL

🔸 第1正規化後のテーブル

学生ID 氏名 電話番号
1 佐藤太郎 090-1234-5678
1 佐藤太郎 080-1111-2222
2 鈴木花子 070-3333-4444

例2) 別のテーブルに分ける方法

🔹 第1正規化前のテーブル

学生ID 氏名
1 佐藤太郎
2 鈴木花子

🔸 第1正規化後のテーブル

学生テーブル

学生ID 氏名
1 佐藤太郎
2 鈴木花子

電話番号テーブル

電話番号ID 学生ID 電話番号
1 1 090-1234-5678
2 1 080-1111-2222
3 2 070-3333-4444

💡 学生IDを外部キーにする


第2正規化 (2NF)

ポイント

  • 部分的な主キーへの従属を無くす

🔹 第2正規化前のテーブル

学生ID 講座ID 学生名 講座名 成績
1 A01 佐藤太郎 数学基礎 80
1 B02 佐藤太郎 英語リーディング 90
2 A01 鈴木花子 数学基礎 85
  • 主キーは 学生ID + 講座ID の複合キー
  • 「学生名」は学生IDにのみ依存、「講座名」は講座IDにのみ依存
  • 👉 これは部分関数従属であり、第2正規化で排除する

🔸 第2正規化後のテーブル

学生テーブル

学生ID 学生名
1 佐藤太郎
2 鈴木花子

講座テーブル

講座ID 講座名
A01 数学基礎
B02 英語リーディング

成績テーブル

学生ID 講座ID 成績
1 A01 80
1 B02 90
2 A01 85

第3正規化 (3NF)

ポイント

  • 非キー → 非キーの従属を解消する(推移的関数従属の排除)

🔹 第3正規化前のテーブル

社員ID 社員名 部署ID 部署名
1 佐藤太郎 D01 営業部
2 鈴木花子 D02 開発部
3 高橋一郎 D01 営業部
  • 主キーは社員ID
  • 「部署名」は「部署ID」に依存(非キー → 非キーの従属)

🔸 第3正規化後のテーブル

社員テーブル

社員ID 社員名 部署ID
1 佐藤太郎 D01
2 鈴木花子 D02
3 高橋一郎 D01

部署テーブル

部署ID 部署名
D01 営業部
D02 開発部

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?