データベーススペシャリスト 2021年 午前2 問03
問題文
関係R(A, B, C)の候補キーが{A, B}と{A, C}であり、{A, B}→C及びC→Bの関数従属性があるとき、関係Rはどこまでの正規形の条件を満足しているか。
選択肢
ア:第1正規形
イ:第2正規形
ウ:第3正規形(正解)
エ:ボイス・コッド正規形
🔒 解説は解答すると表示されます
推移的従属性と3NF【午前2解説】
正解の理由
与えられた関係で候補キーが {A, B} と {A, C}、関数従属性が {A,B} → CおよびC → Bです。このとき関係が第3正規形を満たす理由は、3NFの判定条件に従うと明確になります。3NFの条件は「任意の関数従属性X → Yについて、(1) Xがスーパーキーである、または (2) Yがプライム属性(いずれかの候補キーに含まれる属性)である」のいずれかが成り立てばよい、というものです。
- {A,B} → Cは左辺が候補キー(スーパーキー)なので3NFの条件を満たします。
- C → Bは左辺Cはスーパーキーではありませんが、右辺Bは候補キー {A,B} の一部でありすなわちプライム属性です。したがってこの従属性も3NFの条件を満たします。
以上より、関係は第3正規形を満たします。したがって正解は ウ です。
解法ステップ
- 候補キーとプライム属性を確認する
- 与件より候補キーは {A,B} と {A,C}。よってプライム属性はA, B, Cの全て(すべての属性が候補キーの一部)であると分かる。
- 各関数従属性X → Yを3NF条件で評価する
- {A,B} → C:Xが候補キーなのでOK。
- C → B:Xは候補キーではないが、Y(B) はプライム属性なのでOK。
- 全てのFDが3NF条件を満たすため、関係は第3正規形であると結論付ける。
- 必要ならBCNFもチェック:C → Bは左辺がスーパーキーでないためBCNFを満たさない(従ってBCNFではない)。
選択肢別の誤答解説
- ア: 第1正規形
- 1NFは最も基本であり「属性値が原子である」ことを要求する。与件がより強い性質(候補キーと関数従属性)を持つため、単に1NFとは言えない(より高い正規形である)。
- イ: 第2正規形
- 2NFは「部分関数従属(候補キーの一部に依存する非プライム属性)がない」ことを要求する。ここでは全ての属性がプライム属性のため部分従属による2NF違反はないが、与件ではさらに3NFの判定が可能であり、より高い3NFを満たすため「最高の満足形は2NFである」とは言えない。
- ウ: 第3正規形(正解の理由は上記参照)。
- エ: ボイス・コッド正規形(BCNF)
- BCNFは任意の非自明な従属性X→Yに対しXがスーパーキーであることを要求する。C→Bは左辺CがスーパーキーでないためBCNFを満たさない。
よくある誤解
- 「推移的関数従属がある=必ず3NF違反」
- 誤りです。重要なのは「推移的に従属している属性が非プライムかどうか」です。3NFはRHSがプライム属性であれば許容します。したがって推移的な形があってもRHSがプライムであれば違反になりません。
- 「C→BがあるならCはキーになる」
- 間違いです。C→Bが成り立つことだけでCがスーパーキーになるとは限りません。スーパーキーであるためにはCから関係の全属性(A,B,C)を導ける必要がありますが、与件ではそれが示されていません。
- 「全ての候補キーに含まれる属性は常に正規化不要」
- プライム属性であっても設計上の検討(冗長性や更新異常)が必要な場合があります。正規形判定は理論的条件の判定であり、実運用の観点は別に検討します。
補足コラム
- 3NFの判定は「スーパーキーかプライム属性か」の二択ルールに要約できます。試験対策としては次の順が速いです:候補キーの把握 → プライム属性の把握 → 各FDの評価。
- BCNFと3NFの差は「プライム属性の存在」を許すか否かです。設計上、BCNFを目指すとより冗長性が低くなる一方で分解が必要になり、参照結合が増えるトレードオフがあります。
- 与件のように「全属性がプライム属性」の場合、Rは常に3NFになります(ただしBCNFかどうかはFD次第)。
FAQ
Q1: C→Bがあるから「推移的従属がある」として自動的に3NFに違反しますか?
A1: いいえ。推移的従属による3NF違反は「非プライム属性が別の非プライム属性を介して候補キーに依存している」場合に問題になります。ここではRHSのBがプライム属性なので3NF違反にはなりません。
A1: いいえ。推移的従属による3NF違反は「非プライム属性が別の非プライム属性を介して候補キーに依存している」場合に問題になります。ここではRHSのBがプライム属性なので3NF違反にはなりません。
Q2: すべての属性がプライム属性なら常に3NFですか?
A2: はい。任意のFDのRHSがプライム属性になるため、3NFの条件(RHSがプライムである)が常に満たされます。ただしBCNFかどうかは別途検討が必要です。
A2: はい。任意のFDのRHSがプライム属性になるため、3NFの条件(RHSがプライムである)が常に満たされます。ただしBCNFかどうかは別途検討が必要です。
Q3: BCNFを満たすにはどう確認すればよいですか?
A3: すべての非自明な従属性X→Yに対してXがスーパーキーであることを確認します。本例ではC→Bが左辺非キーのためBCNFは満たしません。
A3: すべての非自明な従属性X→Yに対してXがスーパーキーであることを確認します。本例ではC→Bが左辺非キーのためBCNFは満たしません。
関連キーワード: 関数従属性、3NF、BCNF、プライム属性、候補キー、推移的関数従属

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

