令和3年度 春期 応用情報技術者試験 午前 問29

商品の注文を記録するクラス(顧客,商品,注文,注文明細)の構造を概念データモデルで表現する。a〜dに入れるべきクラス名の組合せはどれか。ここで,顧客は何度も注文を行い,一度に一つ以上の商品を注文でき,注文明細はそれぞれ1種類の商品に対応している。また,モデルの表記にはUMLを用いる。

商品の注文を記録するクラスの構造を概念データモデルで表現するUML図
図の説明テキスト

商品の注文を記録するクラスの構造を概念データモデルで表現するUML図。4つの四角形(クラス)が横一列に並んでおり、左から順に「a」、「b」、「c」、「d」と空欄になっている。四角形同士は実線で結ばれており、線の両端には多重度が記されている。aとbの間:a側が「1」、b側が「」。bとcの間:b側が「1」、c側が「」。cとdの間:c側が「*」、d側が「1」。

解答・解説

正解: ア. a: 顧客, b: 注文, c: 注文明細, d: 商品

商品の注文を記録する概念データモデルにおいて、各クラス間の多重度(1対多などの関係性)を問題文の条件から読み解きます。

  • 「顧客は何度も注文を行い」
    1人の顧客は複数の注文を行います。逆に、1つの注文は必ず1人の顧客に紐づきます。したがって、「顧客」と「注文」は *1対多(1 : ) の関係になります。
  • 「一度に一つ以上の商品を注文でき」かつ「注文明細はそれぞれ1種類の商品に対応している」
    1つの注文の中には、複数の商品が含まれるため、注文ごとに「注文明細」が複数存在します。したがって、「注文」と「注文明細」は 1対多(1 : )* の関係になります。
    また、各注文明細にはそれぞれ1種類の商品が記載されますが、同じ商品は異なる注文明細(異なる注文)に何度も登場します。したがって、「注文明細」と「商品」は *多対1( : 1)
    の関係になります。

これらの関係を整理すると、以下のようにつながります。

  1. 顧客 (1) — (*) 注文
  2. 注文 (1) — (*) 注文明細
  3. 注文明細 (*) — (1) 商品

添付された図表(UMLのクラス図)の多重度を確認すると、以下のようになっています。

  • a と b の間は 1 対 *
  • b と c の間は 1 対 *
  • c と d の間は * 対 1

これらを上記の整理した関係に当てはめると、以下のクラス名が入ります。

  • a = 顧客
  • b = 注文
  • c = 注文明細
  • d = 商品

よって、正しい組み合わせはアです。

各選択肢の解説

  • ア: 正解です。
  • イ: aを商品、bを注文とした場合、dが顧客となります。c(注文明細)とd(顧客)が * : 1 の関係で結ばれることになり、注文明細が直接顧客に紐づく不自然なモデルになります。また、「顧客は何度も注文を行い」という関係が直接表現されていません。
  • ウ: aを注文、bを注文明細とした場合、cが顧客となります。このとき、図の b と c の間の 1 : * の関係より「1つの注文明細が複数の顧客に対応する」ことになってしまい、誤りです。
  • エ: aを注文明細、bを商品とした場合、図の a と b の間の 1 : * の関係より「1つの注文明細に複数の商品が含まれる」ことになります。これは「注文明細はそれぞれ1種類の商品に対応している」という問題文の条件に反します。

Spineチーム