商品の注文を記録するクラス(顧客,商品,注文,注文明細)の構造を概念データモデルで表現する。
a~dに入れるべきクラス名の組合せはどれか。
ここで,顧客は何度も注文を行い,一度に一つ以上の商品を注文でき,注文明細はそれぞれ1種類の商品に対応している。
また,モデルの表記にはUMLを用いる。
図: a(1)―(*)b(1)―(*)c(*)―(1)d
/a|b|c|d
1|顧客|注文|注文明細|商品
2|商品|注文|注文明細|顧客
3|注文|注文明細|顧客|商品
4|注文明細|商品|注文|顧客
正答1
解説
正解は1です。
図はUMLのクラス図で、a、b、c、dが直線でつながり、線の両端に多重度が書かれています。
aとbの間はa側が1、b側が*、bとcの間はb側が1、c側が*、cとdの間はc側が*、d側が1です。
*は「0以上の複数」を表します。
問題文の条件から各クラスの関係を整理すると、次のようになります。
顧客1人は何度も注文するので、顧客1に対して注文が*です。
1回の注文は1つ以上の商品を含むので、注文1に対して注文明細が*です。
注文明細はそれぞれ1種類の商品に対応するので、注文明細*に対して商品が1です。
【選択肢別解説】
1:○ aを顧客、bを注文、cを注文明細、dを商品とすると、すべての多重度が条件と一致します。
顧客1対注文*、注文1対注文明細*、注文明細*対商品1となります。
2:× aを商品、dを顧客とすると、商品が注文と直接結ばれ、注文明細が顧客と結ばれることになります。
注文明細は商品に対応し、顧客は注文を行うという条件に合いません。
3:× aを注文、bを注文明細とすると、bとcの間が注文明細1対顧客*になります。
1つの注文明細に複数の顧客が対応することになり、条件に合いません。
4:× aを注文明細、bを商品とすると、1つの注文明細に複数の商品が対応することになります。
注文明細はそれぞれ1種類の商品に対応するという条件に反します。
【ポイント】
クラス図の多重度は、相手側の端に書かれた数を「自分1つに対して相手がいくつか」と読みます。
「顧客・注文・注文明細・商品」は、伝票の構造を表す典型的なパターンです。