関数従属を次のように表記するとき,属性a~eで構成される関係を第3正規形にしたものはどれか。
〔関数従属〕
(1) 属性Xの値が与えられると,属性Yの値を一意に決めることができる。
(X→Yの矢印表記)
(2) 属性Xと属性Yの二つの値が与えられると,属性Zの値を一意に決めることができる。
(X,Y→Zの矢印表記)
〔正規化する関係〕
属性a,b,c,d,eについて,aからb・c・dへ,bからcへ,b,dからeへの関数従属がある(図参照)。
正答4
解説
正解は4です。
図に示された関数従属をもとに、属性a〜eから成る関係を第3正規形に分解する問題です。
図の矢印を読み取ると、関数従属は次のとおりです。
図の上側の3本の矢印は、aの値が決まるとb、c、dの値がそれぞれ一意に決まることを表します。
図の下側の小さい矢印は、bの値が決まるとcの値が一意に決まることを表します。
図の下側の大きい矢印は、bとdの二つの値が決まるとeの値が一意に決まることを表します。
aからはすべての属性が決まるので、aが主キーです。
第3正規形では、主キー以外の属性が主キーに推移的に従属してはいけません。
【正規化の手順】
cはaからbを経由しても決まるので、aに推移的に従属しています。
そこで、bを主キーとする関係{b,c}に分離します。
eはbとdの組から決まり、そのbとdはaから決まるので、eもaに推移的に従属しています。
そこで、bとdの組を主キーとする関係{b,d,e}に分離します。
残りは、aを主キーとし、b、dを属性とする関係{a,b,d}です。
したがって、{a,b,d}、{b,c}、{b,d,e}の三つに分解されます。
【選択肢別解説】
1:× {a,b,c,d}には、cがbを経由してaに推移的に従属する関係が残っています。
cを分離していないので、第3正規形ではありません。
2:× {b,c}は分離していますが、{a,b,c,d}にもcが残ったままです。
推移的関数従属が解消されておらず、cの値を二重に持つことになります。
3:× {b,d,c,e}は主キーが{b,d}ですが、cはその一部のbだけで決まります。
部分関数従属があるので、第2正規形も満たしません。
4:○ {a,b,d}、{b,c}、{b,d,e}のどの関係でも、主キー以外の属性は主キー全体に直接従属しています。
部分関数従属も推移的関数従属もないので、第3正規形です。
【ポイント】
第2正規形は部分関数従属の排除、第3正規形は推移的関数従属の排除が条件です。
矢印の図から「主キー以外の属性から決まる属性」を見つけ、その決定項を主キーとする別の関係に切り出します。