平成21年度 春期 午前Ⅱ 問5
データベース設計
部分関数従属に関する問題
属性間の従属関係を次のように表記するとき,属性 a~e で構成される関係を第 3 正規形にしたものはどれか。
〔属性間の従属関係〕
(1) 属性 X の値が与えられると,属性 Y の値を一意に決めることができる。
(2) 属性 X と属性 Y の二つの値が与えられると,属性 Z の値を一意に決めることができる。
表記例(原典は図。属性を横に並べた箱から矢印を引いて従属を示す図を文字にした):
(1) [ X | Y | Z ] X から Y へ矢印(X → Y)
(2) [ X | Y | Z ] X と Y をまとめた線から Z へ矢印({X,Y} → Z)
〔正規化する関係〕
正規化する関係:
[ a | b | c | d | e ]
a → b
a → c
a → d
b → c
{b,d} → e- ア[ a | b | c | d ] [ b | d | e ]
- イ[ a | b | c | d ] [ b | d | e ] [ b | c ]
- ウ[ a | b | d ] [ b | d | c | e ]
- エ[ a | b | d ] [ b | c ] [ b | d | e ]
答えと解説を見る
✓ これが正解エ[ a | b | d ] [ b | c ] [ b | d | e ]
解説
キー a の表、b→c の表、{b,d}→e の表の三つに分けます。
関係 a~e のキーは a です。a から b、c、d が決まり、b と d がそろえば e も決まるので、a だけで全属性を決められます。キーが a 一つなので部分関数従属は起きず、問題になるのは推移的な従属です。a→b→c のように、キー以外の属性 b を経て c が決まる従属と、b と d の組を経て e が決まる従属があります。第 3 正規形にするには、これらを別の表に切り出します。b→c を表 [ b | c ] に、{b,d}→e を表 [ b | d | e ] に移し、残りを [ a | b | d ] とした分け方が正解です。キー以外の属性が決定する側になっている従属を探し、その左辺を主キーとする表へ外に出すと覚えると判断しやすくなります。
ほかの選択肢はなぜ違うのか
- ア[ a | b | c | d ] [ …:[ a | b | c | d ] の中に a→b と b→c が同居しているので、c が b を経て a に推移的に従属したまま残ります。同じ b の行が並ぶたびに c も繰り返し記録されるため、第 3 正規形にはなっていません。
- イ[ a | b | c | d ] [ …:b→c の表を切り出してはいますが、元の [ a | b | c | d ] にも c を残しています。c が二か所に重複して記録されるうえ、最初の表には b を経た推移的な従属がそのまま残るので、第 3 正規形の条件を満たしません。
- ウ[ a | b | d ] [ b | …:[ b | d | c | e ] は主キーが b と d の組ですが、c は b だけで決まります。主キーの一部だけに従属する部分関数従属が残るので、第 2 正規形の段階で分解が終わっていない形です。
出典:平成21年度 春期 データベーススペシャリスト試験 午前Ⅱ 問5
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)