データベースの正規化まとめ
投稿日: 更新日:
3つの正規形の達成条件
| 正規化系 | 達成条件 | 
|---|---|
| 第1正規形 | 「繰り返しの列」「セルの結合」が含まれていないこと | 
| 第2正規形 | 部分関数従属する列が含まれてないこと | 
| 第3正規形 | 主キー以外に関数従属する列がない | 
実際に正規化する
非正規形
今回は以下の表を正規化します

非正規形から第1正規形
商品ID、商品名、数量の列が繰り返しています。第1正規形の条件は「繰り返しの列がない」でした。ですので、変形します。

第1正規形から第2正規形
第1正規形の主キーは注文IDと商品IDです。
ここで表を見ると以下のことが分かります
- 数量は- 注文IDと- 商品IDの2つが定まると、1つに定まる
- 商品名は- 商品IDのみで定まる
- 購入者ID、- 購入者は- 注文IDのみで定まる
このように、複合主キーの1つを利用して定まる状況を「部分関数従属」といいます。

では部分関数従属であるものを切り出します。

第3正規形へ
ここで、第2正規形で得れた表を見ると、購入者は購入者IDに従属しており主キーの注文IDには直接的には従属していません。
このように間接的に主キーに従属している状態を「推移関数従属」といいます。

では推移関数従属であるものを切り離します

完成
得られた表は以下のようになります

まとめ
- 第1正規形への変形:繰り返し列の除去
- 複合主キーへの一部への従属を切り離し
- 主キー以外への従属を切り離し
参考文献
すっきり分かるSQL入門第3版 飯田理恵子、中山清喬 (2022) インプレス