推移的関数従属を二段階の矢印で見抜く方法
基本情報技術者試験 令和5年度 問6 / データベース › データベース設計
過去問にチャレンジ
次の関数従属を満足するとき,成立する推移的関数従属はどれか。ここで,“A→B ”はB がA に関数従属していることを表し,“A→{B,C }”は,“A→B ”かつ“A→C ”が成立することを表す。 〔関数従属〕 {注文コード,商品コード}→{顧客注文数量,注文金額}注文コード →{注文日,顧客コード,注文担当者コード}商品コード →{商品名,仕入先コード,商品販売価格}仕入先コード →{仕入先名,仕入先住所,仕入担当者コード}顧客コード →{顧客名,顧客住所}
- ア
仕入先コード → 仕入担当者コード → 仕入先住所
- イ
商品コード → 仕入先コード → 商品販売価格
- ウ
注文コード → 顧客コード → 顧客住所
- エ
注文コード → 商品コード → 顧客注文数量
会話形式の解説
講師推移的関数従属は、二つの矢印が同じ項目を介してつながるかを見ます。前半と後半を分けて確かめましょう。
受験者途中の項目がそろえば、最初の項目から最後の項目までたどれるのですね。
講師はい。注文コードから顧客コード、顧客コードから顧客住所への矢印がそれぞれ与えられています。
受験者つまり、注文コードから顧客住所まで二段階でたどれるので、ウが正解ですね。
講師そのとおりです。ほかの候補も、二つ目の矢印が本当にあるか確認しましょう。
受験者仕入先コードから仕入担当者コードには進めます。そこから仕入先住所にも進めそうに見えます。
講師仕入担当者コードから仕入先住所への従属は示されていません。仕入先コードから両方が決まることと、両者の間に矢印があることは別です。
受験者商品コードから仕入先コードへは進めますが、商品販売価格は仕入先コードで決まるのでしょうか。
講師商品販売価格が従属する先として示されているのは商品コードです。仕入先コードから商品販売価格への矢印は示されていません。
受験者顧客注文数量の候補も気になります。注文コードから商品コードへ進めるかが最初の確認点ですね。
講師はい。その矢印は示されていません。さらに、顧客注文数量は注文コードと商品コードの組で決まるので、商品コードだけで決まるとも読めません。
受験者二段階の矢印を一つずつ確認し、左側に二つの項目がある場合は一つに減らさないようにします。
講師その確認で判断できます。矢印の向きも入れ替えず、与えられた関数従属に沿ってたどりましょう。
まとめ
正解はウです。注文コードが決まると顧客コードが決まり、顧客コードが決まると顧客住所が決まるため、二段階の関数従属が成立します。ほかの候補では、途中から先への矢印が示されていないか、二つの項目で決まる値を一つだけで決まるものとして扱っています。判定するときは、矢印の向きと左辺の項目を一段階ずつ確認します。
解答・解説
正解はウです
この問題のテーマ
関数従属を二段階でたどり、推移的関数従属が成立するものを選ぶ問題です。
解き方の考え方
X→YとY→Zの両方が与えられていれば、X→Zを導けます。各選択肢について、前半と後半の矢印をそれぞれ確認します。ウでは注文コードから顧客コード、顧客コードから顧客住所へとつながります。
選択肢ごとの解説
- ×ア 仕入先コード → 仕入担当者コード → 仕入先住所仕入先コードから仕入担当者コードへの従属は与えられています。しかし、仕入担当者コードから仕入先住所への従属は示されていません。したがって、この順序では推移的関数従属を導けません。
- ×イ 商品コード → 仕入先コード → 商品販売価格商品コードから仕入先コードへの従属は成立します。一方、商品販売価格が従属する先として示されているのは商品コードです。仕入先コードから商品販売価格への従属は示されていないため、二段階にはつながりません。
- ○ウ 注文コード → 顧客コード → 顧客住所注文コードが決まれば顧客コードが決まり、その顧客コードが決まれば顧客住所が決まります。二つの矢印がつながるので、注文コード→顧客住所が推移的に成立します。
- ×エ 注文コード → 商品コード → 顧客注文数量注文コードから商品コードへの従属は示されていません。また、顧客注文数量が従属するのは注文コードと商品コードの組です。商品コードだけで数量が決まるとは読めません。
POINT
- 推移的関数従属の判定では、二つの矢印が同じ属性を介してつながるか確認します。
- 矢印の向きは入れ替えられません。
- 左辺に属性が二つある従属を、そのうち一つだけの従属として扱うことはできません。
