久々にSQLの入門書を読んで復習しているが、これまでRDBの第2正規形や第3正規形をよく理解していなかったので、この機会にきちんと理解しようとしている。
この入門書には簡単な例だけで正規形の正確な意味が書かれていないので、ネットで調べながら勉強していると、ボイス-コッド正規形というものがあることを知った。
第1~3正規形とボイス-コッド正規形の意味を非常に浅く理解した後、ボイス-コッド正規形は必ず第3正規形の条件を満たすというのを読んで、理解するのに結構な時間がかかったので、忘れないように、自分なりの理解で図を書いてみた。
第2正規形とは、「主キーの値が決まれば、他の列の値が決まる」と書いてあることがあるが、私の理解では「主キーまたはいずれかの候補キーの値が全て決まらない限り、他の列の値はどれも決まらない」と書かないと意味が取れないと思う。
第3正規形は、第2正規形でかつ「候補キーでない列の値よって他の列の値が決まることがない」と理解した。
つまり第2正規形は主キーに対して制約がある形、第3正規形は非キー属性にも制約がある形と言えるのではないだろうか。
Boyce-Codd正規形は、「属性間の自明でない依存関係X→Yの全てについて、Xは候補キーかそれを含む集合」ということなので、「候補キーを含まないキーによって定まる属性はない」と理解したが、これだけでは第2~3正規形との関係がよくわからないので、図を書いて考えてみる。
上の図において、A~Eは属性(列)で、ABが主キー、BCは(主キー以外の)候補キーであり、第1正規形である(第1正規形の条件を満たす)とする。
ABの値が決まればD,Eの値が決まるので、AB→D、AB→Eの依存関係がある。
B→Dの依存関係があると、候補キーの値が揃わなくても非キー属性の値が決まってしまうので、第2正規形でない。
D→Eの依存関係があると、候補キー以外の属性(非キー属性)によって決まる非キー属性があることになるので、第3正規形でない。(または、AB→D、D→Eで非キー属性が推移的に候補キーに従属するので、第3正規形でない)
C→Dの依存関係は、非キー属性によって決まる非キー属性があることにはならないので、第3正規形の条件を破らないが、候補キーを含まないキーによって定まる属性があることになるので、Boyce-Codd正規形の条件は満たさない。
正規形の定義は、主に「初心者用データベース入門」とWikipediaのDatabase normalizationのページを参考にした。
コメント