基本情報 令和5年度 科目A 問6:テクノロジ系に関する問題
次の関数従属を満足するとき,成立する推移的関数従属はどれか。ここで,“A→ B ”はB がA に関数従属していることを表し,“A→{B,C }”は,“A→B ”かつ“A→ C ”が成立することを表す。 〔関数従属〕 {注文コード,商品コード}→{顧客注文数量,注文金額} 注文コード →{注文日,顧客コード,注文担当者コード} 商品コード →{商品名,仕入先コード,商品販売価格} 仕入先コード →{仕入先名,仕入先住所,仕入担当者コード} 顧客コード →{顧客名,顧客住所}
- a仕入先コード → 仕入担当者コード → 仕入先住所
- b商品コード → 仕入先コード → 商品販売価格
- c注文コード → 顧客コード → 顧客住所正答
- d注文コード → 商品コード → 顧客注文数量 - 5 -
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは c「注文コード → 顧客コード → 顧客住所」 です。
「A→B」は“Aが決まればBが1つに決まる”という意味。たとえば「学籍番号が決まれば名前が決まる」みたいな感じ。
この問題では3段つなぎ(A→B→C)で“最初のAから最後のCまで間接的に決まる”ペアを探します。
- 注文コードが決まると → 顧客コードが分かる(誰の注文か)
- 顧客コードが決まると → 顧客住所が分かる
- だから 注文コード → 顧客住所 が成り立つ✓
👉 覚え方:“間にいる人を経由して最終ゴールまで決まればOK”。
ほかの選択肢:a・b・dは途中の矢印が問題文にないので、つなげても成立しない(“勝手に追加”はダメ)。
なぜこれが正解か
正解は c。推移的関数従属とは、A→B かつ B→C が成り立ち、A自身が候補キーでないBを経由して A→C が間接的に成立する関係。問題文より「注文コード→顧客コード」「顧客コード→顧客名,顧客住所」が与えられているため、注文コード→顧客コード→顧客住所 が推移的従属として成立する。
各選択肢の解説
- a:仕入先コード→仕入担当者コードは成立するが、仕入担当者コード→仕入先住所は与えられていないため不成立。
- b:商品コード→仕入先コードは成立するが、仕入先コード→商品販売価格は与えられていない(商品販売価格は商品コードから直接決まる)。
- d:注文コード→商品コードは与えられていない(注文コードと商品コードの組合せがキー)。
覚え方・ひっかけ注意
「与えられた関数従属だけを使う」が鉄則。勝手に矢印を補完しないこと。第3正規形(3NF)では推移的従属を排除するため、本問のc型の関係を見つけたら別表に切り出すのが定石。
理論的背景
推移的関数従属(transitive functional dependency)は、関係スキーマR上で属性集合X,Y,Zについて X→Y, Y→Z かつ Y↛X(YがXに従属しない)が成り立つとき、X→Z を推移的従属と呼ぶ。Armstrongの公理系では推移律(X→Y, Y→Z ⇒ X→Z)として定式化される。
正規化での扱い
第3正規形(3NF)は、非キー属性が候補キーに推移的従属しないことを要求する。本問のc「注文コード→顧客コード→顧客住所」では、顧客住所は注文コードに推移的に従属しており、3NF違反。対処は『注文』表と『顧客』表に分割し、注文表は顧客コードを外部キーとして持つ形にする。これにより更新時異常(同一顧客が複数注文を持つ場合、住所変更で複数レコード修正が必要)を防げる。
試験での位置づけ
DB分野の超頻出。基本情報技術者試験では「正規形の判定」「分解後のスキーマ選択」「BCNFと3NFの差異」まで踏み込んで問われる。BCNF(Boyce-Codd正規形)は3NFをさらに強化し、すべての関数従属の左辺がスーパーキーであることを要求する。
選択肢の発展補足
- 本問の主キーは{注文コード,商品コード}の複合キー。注文金額・顧客注文数量はこの組合せに完全関数従属。
- aの「仕入先コード→仕入担当者コード」のように、非キー属性間で関数従属が現れた場合も3NF違反候補(部分従属または推移的従属)として疑うべき。
- 実務ではER図段階で外部キー関係として現れる推移的従属を意識的に分離することで、後の正規化作業を簡略化できる。SQLパフォーマンス上は意図的に非正規化(denormalization)してJOINを減らすケースもあるが、その場合はトリガや制約で整合性を担保する設計が必要。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 令和5年度 科目A 問6/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。