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

- 仕入先コード → 仕入担当者コード → 仕入先住所
- 商品コード → 仕入先コード → 商品販売価格
- 注文コード → 顧客コード → 顧客住所
- 注文コード → 商品コード → 顧客注文数量
[出典:基本情報技術者試験 令和5年度(科目A) 問6]
スポンサーリンク
正解
正解は「ウ」です。
解説
この問題は「推移的関数従属」を理解しているかを問うものです。推移的関数従属とは、「A→B」と「B→C」が成立するとき、「A→C」も成り立つという性質です。これはまるで「AさんがBさんに伝え、BさんがCさんに伝えるなら、AさんからCさんにも伝わる」というような関係です。
今回の正解である「ウ」は、「注文コード → 顧客コード → 顧客住所」という関係です。まず、注文コードが分かれば、それが誰の注文か(顧客コード)が分かります。そして顧客コードが分かれば、その顧客の住所が分かります。したがって、「注文コード → 顧客住所」が推移的に導けます。これは典型的な推移的関数従属の例です。
一方、他の選択肢では推移関係になっていなかったり、関係が間違っていたりします。たとえば、「商品コード → 仕入先コード → 商品販売価格」は、一見すると関係がありそうですが、「仕入先コード」から「商品販売価格」は求まりません。これは商品ごとの価格であり、仕入先が同じでも価格は異なる可能性があるからです。
このように、2段階の関数従属があってはじめて推移的関数従属が成り立ちます。そのため、正解は「ウ」となります。
ア(仕入先コード → 仕入担当者コード → 仕入先住所):
「仕入担当者コード」から「仕入先住所」は推移的に成り立たない可能性があります。複数の仕入先担当者がいても、住所が一意に定まらない場合があります。
イ(商品コード → 仕入先コード → 商品販売価格):
「仕入先コード」から「商品販売価格」は導けません。同じ仕入先が異なる価格の商品を扱うこともあり得るため、関数従属が成立しません。
エ(注文コード → 商品コード → 顧客注文数量):
「商品コード」から「顧客注文数量」は導けません。商品コードは商品の識別子にすぎず、顧客ごとの数量とは無関係です。
難易度
この問題は関数従属と推移的関係の基本的な理解が必要であり、データベース設計や正規化の基本に触れていない初学者にはやや難しいかもしれません。ですが、ルールを整理すれば比較的解きやすい知識問題で、中程度の難易度といえます。
スポンサーリンク
用語補足
関数従属:
ある属性Aの値が決まれば、属性Bの値も一意に決まるという関係です。たとえば「社員ID→社員名」があれば、IDが分かれば名前も分かります。
推移的関数従属:
A→BかつB→Cが成り立つとき、A→Cも成り立つ関係を言います。間接的な関係を明らかにするのに使います。
正規化:
データベース設計で、データの重複や不整合を防ぐためにテーブルを整理する手法です。関数従属の理解は正規化に必須です。
対策
推移的関数従属の理解には、まず「関数従属」の意味を明確にすることが重要です。表を実際に描いてみて、どの値からどの値が決まるのかを図で確認すると理解しやすくなります。正規化の第2〜第3正規形を学ぶ際にも応用される知識です。