令和3年春午前問29について

麻呂さん  
(No.1)
問題文と解説は以下のようになります。
商品の注文を記録するクラス(顧客,商品,注文,注文明細)の構造を概念データモデルで表現する。a~dに入れるべきクラス名の組合せはどれか。ここで,顧客は何度も注文を行い,一度に一つ以上の商品を注文でき,注文明細はそれぞれ1種類の商品に対応している。また,モデルの表記にはUMLを用いる。


設問の文章から以下の関係を導くことができます。
「顧客は何度も注文を行い」
→1人の顧客について複数(0つ以上)の注文が存在し、1つの注文は1人の顧客によって行われるので、顧客クラスと注文クラスの関係は「1対多」となります。
「一度に一つ以上の商品を注文でき」
→1つの注文エンティティについて、1つ以上の注文明細エンティティが存在するので、注文クラスと注文明細クラスの関係は「1対多」となります。
「注文明細はそれぞれ1種類の商品に対応している」
→1つの注文明細は1種類の商品に対応し、1種類の商品は複数の注文明細に関連し得るので、注文明細クラスと商品クラスの関係は「多対1」となります。
以上を整理すると、データ間の関連を適切に表すのは次の概念データモデルです。
  顧客(1)-(多)注文(1)-(多)注文明細(多)-(1)商品
したがって「ア」の組合せが適切となります。

こちらの解説で、2点ほど理解できていない部分があります。
まず、1点目が、”「一度に一つ以上の商品を注文でき」→1つの注文エンティティについて、1つ以上の注文明細エンティティが存在するので、注文クラスと注文明細クラスの関係は「1対多」となります。”
という文から、なぜ注文エンティティに対して、商品エンティティではなく、注文明細エンティティを比較しているのでしょうか。また、なぜ1つの注文エンティティについて、1つ以上の注文明細エンティティが存在するという定義がないのに言い切れるのでしょうか。

次に2点目ですが、”「注文明細はそれぞれ1種類の商品に対応している」→1つの注文明細は1種類の商品に対応し、1種類の商品は複数の注文明細に関連し得るので、注文明細クラスと商品クラスの関係は「多対1」となります。”こちらの文の解釈としては、1つの注文明細は、1種類(複数)の商品の商品と対応しており、1つの商品は、1つの注文明細と対応しているので注文明細クラスと商品クラスの関係は1対多となるのではないでしょうか?
2022.01.07 12:31
マウスさん 
(No.2)
本問の具体的なエンティティは以下のようになります。

注文A  [客Aからの注文]
注文B  [客Aからの注文]
注文明細A  [注文Aに含まれる商品Aについての情報(個数など)]
注文明細B  [注文Aに含まれる商品Cについての情報(個数など)]
注文明細C  [注文Bに含まれる商品Aについての情報(個数など)]

順番は前後しますが、まず2点目の疑問について
商品Aに対しては注文明細A,Cが関係しているように、商品(1)-(多)注文明細となります。
上の例を見ると、「1つの注文明細は1種類の商品に対応し、1種類の商品は複数の注文明細に関連し得る」が理解しやすいのではないでしょうか。
麻呂さんの「1つの注文明細は、1種類(複数)の商品と対応」というのが私には理解できなかったため、見当違いでしたらすみません。

次に1点目の疑問ですが
[正解]顧客(1)-(多)注文(1)-(多)注文明細(多)-(1)商品
[麻呂さんの考え]顧客(1)-(多)注文(1)-(多)商品(1)-(多)注文明細
ということで合っているでしょうか?

おそらく後者の関係でも間違ってはいないと思います。
ただ感覚的に、注文と注文明細は関係していそうという感じがあり、前者の方がきれいな形のように思います。
今回の問題ではa~dを埋める形式の為、後者では当てはめることができないということもあるので、正解は1択になります。

「なぜ1つの注文エンティティについて、1つ以上の注文明細エンティティが存在するという定義がないのに言い切れるのでしょうか。」
これに関しては、2点目の疑問についてのところで「注文明細はそれぞれ1種類の商品に対応」という意味を理解していただければ、納得できるかと思います。
2022.01.07 17:18
おわ!さん 
AP ブロンズマイスター
(No.3)
顧客、商品、注文、注文明細の情報をDBのテーブルに保持する場合の
各テーブルの主キーと外部キーを考えるとわかりやすいかもしれません。

■マスタ系
顧客テーブル  [(PK)顧客ID, ...]
商品テーブル  [(PK)商品ID, ...]

■トランザクジョン系
注文テーブル  [(PK)注文ID, (FK)顧客ID, ...]
注文明細テーブル  [(PK){(FK)注文ID, 注文明細ID}, (FK)商品ID, ...]

上記ですと
・顧客は何度も注文を行い
・一度に一つ以上の商品を注文でき
・注文明細はそれぞれ1種類の商品に対応している
の要件をみたし、

顧客:注文=1:多
注文:注文明細=1:多
商品:注文明細=1:多

となります。
2022.01.07 19:45
麻呂さん  
(No.4)
マウスさん、おわ!さん、ご親切に回答してくださり、誠に有難う御座います。
お二人とも別の観点からご回答頂いたので、考察が広がり、大変感謝しております。

ただ、大変恐縮ですが、なぜ商品:注文明細=1:多となるのか未だに理解が追いつきません。
必死に考えた挙句出た結論と致しましては、商品A、B、Cの3種類があり、
商品Aを1つ、商品Bを2つ、商品Cを3つ、それぞれ注文したとすると、
注文明細は
・商品A 1つ
・商品B 2つ
・商品C 3つ
このように注文明細が3つできると考えております。
ですので、1つの注文明細から商品AまたはBまたはCの1種類が紐づき、
1種類の商品から1つの注文明細が紐づく。
よって、商品:注文明細=1:1になるのではないかと思いました。

恐れの多い所存では御座いますが、商品:注文明細=1:多となる理由を、どなたかご回答をお待ちしております。

2022.01.10 15:20
GinSanaさん 
AP プラチナマイスター
(No.5)
何度も注文して初回がハイボール2つ、ハイボール追加ってやってったら1対多で明細が増えていくのと一緒ですよ。
2022.01.10 16:58
おわ!さん 
AP ブロンズマイスター
(No.6)
この投稿は投稿者により削除されました。(2022.01.10 18:58)
2022.01.10 18:58
おわ!さん 
AP ブロンズマイスター
(No.7)
この投稿は投稿者により削除されました。(2022.01.14 06:52)
2022.01.14 06:52
おわ!さん 
AP ブロンズマイスター
(No.8)
この投稿は投稿者により削除されました。(2022.01.14 06:54)
2022.01.14 06:54
おわ!さん 
AP ブロンズマイスター
(No.9)
この投稿は投稿者により削除されました。(2022.01.14 06:52)
2022.01.14 06:52
麻呂さん  
(No.10)
GinSanaさん、おわ!さんご回答頂き有難う御座います。
返信が遅れてしまい大変申し訳ございません。
GinSanaさんのとてもユニークで的を得たご回答を、さらにおわ!さんが詳しく教えてくださり、長きに渡るモヤモヤが解消されました。

心より感謝致します。
本当に有難う御座いました。
2022.01.15 12:00

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop