問6 推移的関数従属の見つけ方

基本情報​技術者試験 令和5年度 公開問題 科目A、全20問のうちの問6。

出典:令和5年度 基本情報技術者試験 公開問題 科目A 問6(〔関数従属〕の並びは、問題文の中で 1 行ずつ改行で区切った)

次の関数従属を満足するとき,成立する推移的関数従属はどれか。ここで,“A→B”は B が A に関数従属していることを表し,“A→{B,C}”は,“A→B”かつ“A→C”が成立することを表す。

〔関数従属〕

{注文コード,商品コード}→{顧客注文数量,注文金額}

注文コード →{注文日,顧客コード,注文担当者コード}

商品コード →{商品名,仕入先コード,商品販売価格}

仕入先コード →{仕入先名,仕入先住所,仕入担当者コード}

顧客コード →{顧客名,顧客住所}

  1. ア仕入先コード → 仕入担当者コード → 仕入先住所
  2. イ商品コード → 仕入先コード → 商品販売価格
  3. ウ注文コード → 顧客コード → 顧客住所
  4. エ注文コード → 商品コード → 顧客注文数量
答えと解説を開く

正解はウです。

推移的関数従属は、A→B と B→C が成り立ち、その結果として A→C が成り立つ関係です (ここで B→A は成り立たないものとします)。ウを確かめます。2 行目の「注文コード →{注文日,顧客コード,注文担当者コード}」から、注文コード → 顧客コード が成り立ちます。5 行目の「顧客コード →{顧客名,顧客住所}」から、顧客コード → 顧客住所 が成り立ちます。この 2 つをつなぐと、注文コード → 顧客コード → 顧客住所 になります。顧客コードが決まっても注文コードは 1 つに決まらないので、B→A は成り立ちません。正解はウです。

ほかの選択肢が違う理由

  • ア仕入担当者コード → 仕入先住所 という関数従属はありません。仕入先住所は仕入先コードで決まる項目で、仕入担当者コードから決まるとは示されていません。
  • イ仕入先コード → 商品販売価格 という関数従属はありません。商品販売価格は商品コードで直接決まる項目です。
  • エ注文コード → 商品コード という関数従属はありません。1 つの注文に複数の商品が入るので、顧客注文数量は注文コードと商品コードの組で決まります。

仕組み

関数従属 A→B は「A の値が決まれば B の値が 1 つに決まる」という関係です。推移的関数従属は、その関係が別の項目を中継して 2 段でつながっている形です。

第 3 正規形では、推移的関数従属をなくすために表を分けます。この問なら、顧客名と顧客住所を注文の表から外し、顧客コードをキーにした顧客の表に移します。

この問に出る言葉