読者です 読者をやめる 読者になる 読者になる

making for the future

〜食べたもの、気がついた事、時々ITネタの自分用メモ

わかりやすい第四正規形、第五正規形

データベーススペシャリストの試験で勉強すべきか迷うボイスコッド正規形以上の正規化の例。

第四正規形

例えば料理に対して、つける調味料(醤油等)と薬味(わさび)等の組み合わせをDB化するとする
第三正規形を満たす形で設計すると

マグロ 醤油 わさび
イカ 醤油 わさび
イカ 醤油 生姜
カツオのタタキ 醤油 生姜
カツオのタタキ ポン酢 生姜
カツオのタタキ ポン酢 タマネギ

とかでも許されちゃうじゃんね。でも普通こんなふうに設計しないだろ?っていうのが、第四正規形

マグロ 醤油
イカ 醤油
カツオのタタキ 醤油
カツオのタタキ ポン酢

マグロ わさび
イカ わさび
イカ 生姜
カツオのタタキ 生姜
カツオのタタキ タマネギ

普通はこうやって薬味と調味料は別テーブルにして、属性「料理」で結合すればいいでしょ?という話

スポンサード リンク


第五正規形

例えば料理に対して、つける調味料(醤油等)と薬味(わさび)等の組み合わせをDB化するとする
第三正規形を満たす形で設計すると

海老フライ ソース からし
海老フライ 醤油 からし
海老フライ 醤油 大根おろし
カツオのタタキ 醤油 生姜
カツオのタタキ 醤油 ネギ
カツオのタタキ ポン酢 生姜
カツオのタタキ ポン酢 ネギ

とかでも許されちゃうじゃんね。でも普通こんなふうに設計しないだろ?っていうのが、第四正規形

海老フライ ソース
海老フライ 醤油
カツオのタタキ 醤油
カツオのタタキ ポン酢

海老フライ からし
海老フライ 大根おろし
カツオのタタキ 生姜
カツオのタタキ ネギ

普通はこうして料理で結合すればいい


だけど普通に結合するとカツオのタタキは生姜醤油、醤油とネギ、ポン酢生姜、ポン酢とネギの
組み合わせでいいけど、海老フライの場合は

海老フライ ソース からし
海老フライ 醤油 からし
海老フライ 醤油 大根おろし
海老フライ ソース 大根おろし

というようにソースと大根おろしとかわけわからん組み合わせができてしまうじゃんね
ソースに大根おろしはねーだろというのが第四正規形じゃうまく表現できないから、
多値に従属する属性同士を関連づけるテーブル作ればいいじゃんってのが第五正規形

醤油 からし
醤油 大根おろし
ソース からし
ポン酢 生姜
ポン酢 ネギ

という薬味と調味料のルールを作っておけば、元の表に戻せるしソースに大根おろしを入れて食べなくて済む
カツオのタタキにからし醤油とかできちゃうのは例が悪かったからだ。