戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2016年 春期 午前227


問題文

関数従属を次のように表記するとき、属性 a〜eで構成される関係を第3正規形にしたものはどれか。
応用情報技術者 2016年 春期 午前2 問27の問題画像応用情報技術者 2016年 春期 午前2 問27の選択肢の画像

選択肢

(正解)

🔒 解説は解答すると表示されます

3NF分解の合成法【午前2解説】

正解の理由

与えられた関数従属を最小被覆に変換すると,主要な非冗長な従属は a → b, a → d, b → c, b → e となります。合成法(最小被覆からの分解)に従うと,LHS(左辺)が同じもの同士をまとめて部分スキーマを得ます。すると代表的な分解は R1(a,b,d) と R2(b,c,e) です。ここで R1 は a がそのスキーマの鍵になり,R2 は b がそのスキーマの鍵になるため,いずれも第3正規形(3NF)を満たします。
選択肢の並びを見ると,(a,b,d) を含み,残りの属性群 b,c,e を (b,c) および (b,d,e) に分けている選択肢が存在します。分解の観点で,(b,c,e) を (b,c) と (b,d,e) に分けても,関数従属の保存性と結合の可逆性(lossless-join)を保つことができます。したがって選択肢が正解です。

解法ステップ

  1. 与えられた関係 R(a,b,c,d,e) と図示された従属を列挙する。図は次の FD を表すと読むのが自然:
    • a → b, a → c, a → d, a → e
    • b → c, b → e
  2. RHS を分解し,冗長な従属を削る(最小被覆の作成):
    • a → c は a → b と b → c から透過的に導ける → 削除
    • a → e は a → b と b → e から導ける → 削除 → 残る最小被覆:a → b, a → d, b → c, b → e
  3. 合成法(最小被覆の各 FD の LHS と RHS をまとめる):
    • a → b と a → d は LHS が同じ → R1(a,b,d)
    • b → c と b → e は LHS が同じ → R2(b,c,e)
  4. 候補キーの確認(元の関係 R に対して):
    • a+ = {a} → b (a→b) → c (b→c) → e (b→e) → d (a→d) ⇒ a+ = {a,b,c,d,e},よって a が候補キー
    • よって a を含む部分スキーマがあれば lossless-join 条件は満たしやすい
  5. 選択肢と照合:
    • 選択肢は (a,b,d),(b,c),(b,d,e) を並べた構成で,(a,b,d) は上記 R1 に一致。
    • 残る属性群 b,c,e を (b,c) と (b,d,e) に分けても,結合によって元の b,c,e の情報を復元でき,FD も保存されるため妥当な分解である。

選択肢別の誤答解説

  • ア: (a,b,c,d) と (b,d,e) に分ける構成。ここで (a,b,c,d) に a→b,a→c,a→d が入るが,b→e が保存されるためには (b,e) を持つスキーマが必要。アは b→c,b→e の両方を保存できないため依存性保存性を欠く。
  • イ: (a,b,c,d),(b,c),(b,d,e) の3分割。左側に a を含むが,冗長に (b,c) を別に置いているので依存性や鍵の配置はやや冗長。選択肢エの方が最小被覆由来の分解に忠実。
  • ウ: (a,b,d) と (b,d,c,e) の2分割。後者のスキーマは (b,c,e,d) をまとめたもので,a を含むスキーマが 1 つだけなので結合の可逆性は保たれるが,通常の合成法で得られる構成とは異なる整理のされ方をしており,選択肢エが合成法の手順により自然に対応する。
(設問の選択肢表現は図的なので,選択肢の妥当性は「依存性保存」「lossless-join」「各部分スキーマの 3NF 判定」で判断するのが確実です。)

よくある誤解

  1. 「最小被覆作成で RHS のまとめ忘れ」
    RHS を分解しておかないと,合成法で作るスキーマが不適切になりやすい(たとえば a → bc を a → b,c に分けずに扱うと候補キーや部分スキーマの集合がずれる)。
  2. 「投影される FD の判定の誤り」
    あるスキーマに投影されたときにどの FD が残るかを正確に判断しないと,そのスキーマが 3NF を満たすかどうかの判定を誤る。投影は元の FD から導かれるすべての FD を考慮する必要がある。
  3. 「部分スキーマの追加・分割を勝手にすると依存性保存や可逆性を壊す」
    分解・再結合は可逆性(lossless)と依存性保存を必ずチェックすること。単に属性を分けただけでは正規化の目的を達さない可能性がある。

補足コラム

  • 合成法(synthesis algorithm)は,最小被覆を作り,LHS が同じ FD をまとめて部分スキーマを作る手順です。この方法は「依存性保存」と「実用的に損失のない結合(lossless-join)」を満たすことが保証されているので,試験問題の解法として標準的かつ安全です。
  • 最小被覆の作り方は(1)RHS を単一属性に分解,(2)LHS の冗長属性を削除,(3)冗長な FD を削除、の順で行います。実務でも正規化設計の基礎となる重要な手順です。

FAQ

Q1. 最小被覆で「a→c を消してよい」と判断した根拠は?
A1. a→c は a→b と b→c の合成(透過)により導けるため冗長であると判断できます。最小被覆では,別の FD の組合せで導ける FD を削除します。
Q2. 合成法でできた (a,b,d) と (b,c,e) は必ず 3NF になるのですか?
A2. 合成法により得られる各部分スキーマは,最小被覆の FD に基づいて作られるため,各スキーマ内で LHS がスキーマのキーになるか,RHS が素属性になる(3NF 条件)ことが満たされるケースが多く,依存性保存と lossless-join を同時に満たすよう設計されています。個々のスキーマについては投影された FD を確認して 3NF 判定を行ってください。

関連キーワード: 正規化、最小被覆、合成法、部分関数従属、lossless-join、依存性保存、候補キー、3NF
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について