リレーショナルデータベースの正規化

正規化とは、データベース設計においてデータの冗長性を減らし、データの整合性を向上させるプロセスです。主に第1正規形(1NF)、第2正規形(2NF)、第3正規形(3NF)の3段階があります。

非正規形(正規化前のデータ)

正規化前のデータには、繰り返しグループや冗長なデータが含まれています。

注文ID 顧客ID 顧客名 顧客住所 商品1ID 商品1名 商品1価格 商品1数量 商品2ID 商品2名 商品2価格 商品2数量
1001 C101 田中太郎 東京都新宿区 P001 ノートPC 80000 1 P002 マウス 3000 2
1002 C102 鈴木花子 大阪府大阪市 P003 キーボード 5000 1 P001 ノートPC 80000 1
1003 C101 田中太郎 東京都新宿区 P002 マウス 3000 1 null null null null
問題点:

第1正規形 (1NF)

第1正規形は、繰り返しグループを排除し、各セルが原子的(分割できない)値のみを持つようにします。

注文ID 顧客ID 顧客名 顧客住所 商品ID 商品名 価格 数量
1001 C101 田中太郎 東京都新宿区 P001 ノートPC 80000 1
1001 C101 田中太郎 東京都新宿区 P002 マウス 3000 2
1002 C102 鈴木花子 大阪府大阪市 P003 キーボード 5000 1
1002 C102 鈴木花子 大阪府大阪市 P001 ノートPC 80000 1
1003 C101 田中太郎 東京都新宿区 P002 マウス 3000 1
改善点: 残っている問題点:

第2正規形 (2NF)

第2正規形は、第1正規形を満たし、かつ部分関数従属性を排除します。非キー属性がプライマリキー全体に完全関数従属している状態です。

注文ヘッダーテーブル

注文ID 顧客ID
1001 C101
1002 C102
1003 C101

注文詳細テーブル

注文ID 商品ID 数量
1001 P001 1
1001 P002 2
1002 P003 1
1002 P001 1
1003 P002 1

顧客テーブル

顧客ID 顧客名 顧客住所
C101 田中太郎 東京都新宿区
C102 鈴木花子 大阪府大阪市

商品テーブル

商品ID 商品名 価格
P001 ノートPC 80000
P002 マウス 3000
P003 キーボード 5000
改善点: 残っている問題点:

第3正規形 (3NF)

第3正規形は、第2正規形を満たし、かつ推移的関数従属性を排除します。非キー属性は、キーに直接依存し、他の非キー属性に依存しない状態です。

注文ヘッダーテーブル

注文ID 顧客ID
1001 C101
1002 C102
1003 C101

注文詳細テーブル

注文ID 商品ID 数量
1001 P001 1
1001 P002 2
1002 P003 1
1002 P001 1
1003 P002 1

顧客テーブル

顧客ID 顧客名 住所ID
C101 田中太郎 A001
C102 鈴木花子 A002

住所テーブル

住所ID 住所詳細
A001 東京都新宿区
A002 大阪府大阪市

商品テーブル

商品ID 商品名 価格
P001 ノートPC 80000
P002 マウス 3000
P003 キーボード 5000
改善点: 正規化の主なメリット: