メインコンテンツへ
データベース

次の関数従属を満足するとき、成立する推移的関数従属はどれか。ここで、“A→ B”は Bが Aに関数従属していることを表し、“A→{B、C}”は、“A→B”かつ“A→ C”が成立することを表す。 〔関数従属〕 {注文コード、商品コード}→{顧客注文数量、注文金額} 注文コード →{注文日、顧客コード、注文担当者コード} 商品コード →{商品名、仕入先コード、商品販売価格} 仕入先コード →{仕入先名、仕入先住所、仕入担当者コード} 顧客コード →{顧客名、顧客住所}

ア.仕入先コード → 仕入担当者コード → 仕入先住所
イ.商品コード → 仕入先コード → 商品販売価格
ウ.注文コード → 顧客コード → 顧客住所正解
エ.注文コード → 商品コード → 顧客注文数量

解説

推移的関数従属は『AがBを決め、BがCを決めるが、AはCを直接は知らない』という中継点経由の依存関係。注文書から顧客コードを調べ、顧客台帳で住所を調べる——この2ステップのリレーがそれ。

なぜ ウ が正解か

注文コード → 顧客コード は問題文の依存関係に明記されている。顧客コード → 顧客住所 も同様に定義済み。注文コードは顧客住所を『直接は知らない』が、顧客コードという中継点を踏むことで間接的に確定できる——これが推移的関数従属の定義そのもの。

なぜ ア は間違いか

仕入先コード → 仕入担当者コードまでは問題文にある依存関係だが、仕入担当者コード → 仕入先住所という依存関係はどこにも定義されていない。担当者が住所を決めるなら、担当者が変わるたびに会社が引っ越す羽目になる。

なぜ イ は間違いか

仕入先コード → 商品販売価格という依存関係が問題文に存在しない(仕入先コードが決めるのは仕入先名・住所・仕入担当者コード)。しかも商品販売価格は商品コードから『直接』決まるので、これは推移どころかただの親子関係。

なぜ エ は間違いか

注文コード単独では商品コードは決まらない——1注文に複数商品が含まれるから複合キーが必要なのがその証拠。さらに顧客注文数量も複合キー{注文コード, 商品コード}で初めて決まる属性。スタートもゴールも間違いという二重苦。

出典: 基本情報技術者試験 令和5年 公開問題