データベーススペシャリスト 2014年 午前2 問06
問題文
第3正規形において存在する可能性のある関数従属はどれか。
選択肢
ア:候補キーから繰返し属性への関数従属
イ:候補キーの真部分集合から他の候補キーの真部分集合への関数従属(正解)
ウ:候補キーの真部分集合から非キー属性への関数従属
エ:非キー属性から他の非キー属性への関数従属
🔒 解説は解答すると表示されます
第3正規形の関数従属【午前2解説】
正解の理由
第3正規形(3NF)は「任意の非自明な関数従属 について, が候補キーのスーパーキーであるか,あるいは がいずれかの候補キーに含まれるプライム属性であること」を満たすことが条件です。
したがって、候補キーの真部分集合から他の候補キーの真部分集合への関係は、右辺の属性が候補キーに含まれるプライム属性であれば 3NF で許容されます。選択肢の中でこれに該当するのは イ です。
したがって、候補キーの真部分集合から他の候補キーの真部分集合への関係は、右辺の属性が候補キーに含まれるプライム属性であれば 3NF で許容されます。選択肢の中でこれに該当するのは イ です。
(補足)問題文の「非キー属性」「繰返し属性」の扱いを明確にすると:
- 繰返し属性(多値属性)は 1NF に違反するため、そもそも 3NF の議論に入る前に排除(分解)する必要があります。
- 非キー属性同士の関数従属は,推移的従属を生じさせる形となり原則 3NF を満たさない(右辺がプライム属性でない限り許されない)ことを明示します。
解法ステップ
- まず 1NF の確認:繰返し属性(多値属性)が絡む選択肢は 1NF違反なので除外する。
- 次に 2NF の観点:候補キーの真部分集合 → 非プライム属性(非キー属性)は部分関数従属であり 2NF/3NF を満たさない。
- 3NF の定義適用:任意の について, がスーパーキーか,または がプライム属性かを確認する。右辺がプライム属性であれば 3NF で許容される。
- 各選択肢を上の基準で判定する。
選択肢別の誤答解説
-
ア: 候補キーから繰返し属性への関数従属
- 繰返し属性(多値属性)は 1NF の違反要因です。1NF を満たしていないテーブルはそのままでは 3NF の議論対象になりません。従って 3NF に「存在する可能性がある」とは言えません(まず分解して多値属性を別表にする必要があります)。
-
イ: 候補キーの真部分集合から他の候補キーの真部分集合への関数従属
- 正答。右辺が候補キーの部分に含まれる属性(=プライム属性)であれば,左辺がスーパーキーでなくても 3NF の条件を満たします。したがってこの種の従属は 3NF の下で存在し得ます。
-
ウ: 候補キーの真部分集合から非キー属性への関数従属
- 部分関数従属に該当します。非キー属性はプライム属性ではないため,この従属は 2NF(部分従属)および 3NF を満たさず,違反となります。通常は分解により解消します。
-
エ: 非キー属性から他の非キー属性への関数従属
- 非キー属性同士の従属は推移的従属を生じさせ,3NF に違反します(右辺がプライム属性であれば例外になるが、「非キー属性」は通常プライムではないことを意味するので違反と判断)。一般的には許容されません。
よくある誤解
- 「3NF は左辺がスーパーキーでなければすべてダメ」
- 誤り。右辺がプライム属性であれば,左辺がスーパーキーでなくても 3NF は満たされる(これが 3NF と BCNF の違いの核心)。
- 「繰返し属性は単なる ‘非キー属性’ だから 3NF の議論で扱える」
- 誤り。繰返し属性は多値性により 1NF に反するため、まず別表化(正規化)してから上位の正規形を考える必要があります。
- 「非キー→非キー は常に推移的従属という表現だけで済む」
- 注意点として、右辺がプライム属性であれば 3NF で許されるケースがあるため、「常に」と断言してはいけません。ただし問題文の「非キー属性」は非プライムを指す文脈が多く、その場合は違反です。
補足コラム
- 3NF と BCNF の違い:
- 3NF は「 がスーパーキーであるか、 がプライム属性であるか」のどちらかを許容する。一方 BCNF は「すべての非自明な について がスーパーキーであること」(右辺がプライムかどうかは問わない)を要求する。したがって 3NF に合格していても BCNF に違反する場合があります(例: が存在し がスーパーキーでないが がプライム属性である場合、3NF は OK、BCNF は NG)。
- 具体的イメージ(抽象例):
- 属性集合 とし, と が成り立つとする。すると と は互いに決定しあい互換性があるため,候補キーとして と が存在し得ます。このとき は「候補キーの真部分集合(B)→他の候補キーの真部分集合(C)」の形を取り, はプライム属性なので 3NF では許容されます(ただし BCNF では許されません)。
FAQ
Q. 「プライム属性」はどうやって判定する?
A. ある属性が「いずれかの候補キーに含まれている」ならばプライム属性です。候補キーの列挙が必要ですが,候補キーの一部であればプライム属性と判断します。
A. ある属性が「いずれかの候補キーに含まれている」ならばプライム属性です。候補キーの列挙が必要ですが,候補キーの一部であればプライム属性と判断します。
Q. 部分関数従属はいつ問題になる?
A. 候補キーの真部分集合 → 非プライム属性 の形は部分従属で,2NF/3NF に違反します。解決は関係の分解(正規化)です。
A. 候補キーの真部分集合 → 非プライム属性 の形は部分従属で,2NF/3NF に違反します。解決は関係の分解(正規化)です。
Q. 多値属性(繰返し属性)を見つけたら?
A. まずその多値属性を別関係に分解して 1NF を満たすようにする必要があります。1NF が満たされなければ 2NF/3NF の判定は無意味です。
A. まずその多値属性を別関係に分解して 1NF を満たすようにする必要があります。1NF が満たされなければ 2NF/3NF の判定は無意味です。
関連キーワード: 正規化、第3正規形、候補キー、プライム属性、部分関数従属、推移的従属、多値属性、BCNF

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

