データベーススペシャリスト 2022年 午前2 問04
問題文
関係R(A, B, C, D, E)に対し、関数従属の集合 W={A→{B, C}、{A, D}→E, {A, C, D}→E, B→C, C→B}がある。関数従属の集合X, Y, Zのうち、Wから冗長な関数従属をなくしたものはどれか。
X = {A→B, B→C, C→B, {A, D} →E}
Y = {A→C, B→C, C→B, {A, D} →E}
Z = {A→B, C→B, {A, C, D} →E}
選択肢
ア:Xだけ
イ:XとY(正解)
ウ:YとZ
エ:Zだけ
関数従属の冗長性除去問題【午前2 解説】
要点まとめ
- 結論:関数従属の集合Wから冗長なものを除くとXとYが正解となる。
- 根拠:Wの中で{A, C, D}→Eは{A, D}→Eで既に決定できるため冗長。A→CはA→BとB→Cから導出可能。
- 差がつくポイント:関数従属の冗長性判定は、他の従属から推移的に導けるかを正確に見極めることが重要。
正解の理由
選択肢イのXとYは、Wの関数従属から冗長なものを除いた集合です。
- XはA→B, B→C, C→B, {A, D}→Eを含み、{A, C, D}→Eが冗長であるため除外しています。
- YはA→C, B→C, C→B, {A, D}→Eを含み、A→CはA→BとB→Cから導出可能で冗長ではありません。
- Zは{A, C, D}→Eを含み、これは{A, D}→Eで決定できるため冗長です。
したがって、XとYが正しい冗長除去後の集合です。
よくある誤解
関数従属の冗長性は単純に含まれているか否かで判断しがちですが、他の従属から導出可能かを必ず検証する必要があります。
解法ステップ
- Wの各関数従属について、他の従属から導出可能か検証する。
- {A, C, D}→Eは{A, D}→Eで決定できるため冗長と判断。
- A→CはA→BとB→Cの合成で導出可能か確認。
- 冗長な関数従属を除いた集合を作成。
- 選択肢と照合し、正しい集合を選ぶ。
選択肢別の誤答解説
- ア: Xだけ
{A, C, D}→Eを除外しているが、A→Cが冗長か否かの判断が抜けているため不完全。 - イ: XとY
冗長な関数従属を正しく除外し、正解。 - ウ: YとZ
Zに冗長な{A, C, D}→Eが含まれているため誤り。 - エ: Zだけ
冗長な関数従属を含むため誤り。
補足コラム
関数従属の冗長性除去は正規化の基礎であり、データベース設計の品質向上に不可欠です。特に推移的関数従属の検出と除去は、正規形の判定に直結します。
FAQ
Q: 関数従属の冗長性はどうやって判定しますか?
A: 他の関数従属の組み合わせから推移的に導出できるかを検証し、導出可能なら冗長と判断します。
A: 他の関数従属の組み合わせから推移的に導出できるかを検証し、導出可能なら冗長と判断します。
Q: A→Cが冗長になる条件は?
A: A→BとB→Cが存在し、A→Cがこれらから導出可能な場合に冗長となります。
A: A→BとB→Cが存在し、A→Cがこれらから導出可能な場合に冗長となります。
関連キーワード: 関数従属、冗長性除去、正規化、推移的関数従属、データベース設計

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

