問29
商品の注文を記録するクラス (顧客、商品、注文、注文明細) の構造を概念データモデルで表現する。a〜dに入れるべきクラス名の組合せはどれか。ここで、顧客は何度も注文を行い、一度に一つ以上の商品を注文でき、注文明細はそれぞれ1種類の商品に対応している。また、モデルの表記にはUMLを用いる。
┌───┐ ┌───┐ ┌───┐ ┌───┐
│ │1 *│ │1 *│ │* 1│ │
│ a ├───┤ b ├───┤ c ├───┤ d │
│ │ │ │ │ │ │ │
└───┘ └───┘ └───┘ └───┘
┌────┬────┬────┬────┐
│ a │ b │ a │ b │
┌─┼────┼────┼────┼────┤
│ア│ 顧客 │ 注文 │注文明細│ 商品 │
├─┼────┼────┼────┼────┤
│イ│ 商品 │ 注文 │注文明細│ 顧客 │
├─┼────┼────┼────┼────┤
│ウ│ 注文 │注文明細│ 顧客 │ 商品 │
├─┼────┼────┼────┼────┤
│エ│注文明細│ 商品 │ 注文 │ 顧客 │
└─┴────┴────┴────┴────┘
正解
ア
解説
a 1 − * b はaからみるとbは1つ以上対応し、bからみるとaは1つ対応するということである。
顧客は何度も注文を行うが、注文からみると顧客が1つ決まるため、
顧客 1 − * 注文 である。
一度に一つ以上の商品を注文できるので、注文明細も一つ以上になる。逆に注文明細からみると、注文は1つ対応する。よって、
注文 1 − * 注文明細 である。
注文明細はそれぞれ1種類の商品に対応しているが、商品からみるといくつもの注文明細に対応しているため、
注文明細 * − 1 商品 である。
したがって、以下の関係となる。
顧客 1 − * 注文 1 − * 注文明細 * − 1 商品