データベースの正規化まとめ

投稿日: 更新日:

3つの正規形の達成条件

正規化系達成条件
第1正規形「繰り返しの列」「セルの結合」が含まれていないこと
第2正規形部分関数従属する列が含まれてないこと
第3正規形主キー以外に関数従属する列がない

実際に正規化する

非正規形

今回は以下の表を正規化します

非正規形の表

非正規形から第1正規形

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

非正規形から第1正規形へ変形

第1正規形から第2正規形

第1正規形の主キーは注文ID商品IDです。

ここで表を見ると以下のことが分かります

  • 数量注文ID商品IDの2つが定まると、1つに定まる
  • 商品名商品IDのみで定まる
  • 購入者ID購入者注文IDのみで定まる

このように、複合主キーの1つを利用して定まる状況を「部分関数従属」といいます。

関数従属と部分関数従属

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

第1正規形から第2正規形へ

第3正規形へ

ここで、第2正規形で得れた表を見ると、購入者購入者IDに従属しており主キーの注文IDには直接的には従属していません。

このように間接的に主キーに従属している状態を「推移関数従属」といいます。

推移関数従属

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

第3正規形へ

完成

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

完成

まとめ

  • 第1正規形への変形:繰り返し列の除去
  • 複合主キーへの一部への従属を切り離し
  • 主キー以外への従属を切り離し

参考文献

すっきり分かるSQL入門第3版 飯田理恵子、中山清喬 (2022) インプレス

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人