クラス図の1:多の関係について

八王子さんさん  
(No.1)
https://www.ap-siken.com/kakomon/07_haru/q25.html

上記問題など。
よく『顧客1ーーー*注文』のような関係が出てきますが、これは入れ替えても成り立つのでしょうか。つまり『注文*ーーー1顧客』ということです。

『顧客1人(1)に対し、注文は複数(*)ある』は理解できますが、
『複数の注文(*)は、顧客1人(1)になる』というのは成り立たない気がします。

なぜなら注文を無作為に複数選んだ時、当たり前ですが複数の客になる可能性があるからです。どんな状態においても正しいという訳ではなく反例がある以上、式としては成り立たない気がします。

『顧客:注文=1:*』という式は、数学的には『注文:顧客=*:1』も成り立ちそうですが、感覚と反するので理解に困っています。

このような問題が出てきたときは入れ替えた方も理解しておかないと躓くでしょうか。それとも1の方を基準にした考えだけで今後も解けるのでしょうか?
2025.08.01 08:58
GinSanaさん 
AP プラチナマイスター
(No.2)
基本は、1の方を基準にして解く・・・というか日常的には考えると思います
「注文*ーーー1顧客」であっても、1側の顧客を基準に「顧客1人(1)に対し、注文は複数(*)ある」という解釈をする、ということです。
2025.08.01 10:28
八王子さんさん  
(No.3)
GinSanaさん
ありがとうございます。いつも的確なご指摘を下さるプラチナマイスターがおっしゃるなら安心です。
難しいことは一旦置いておき、直感的に理解できる1の方を基準にして考えたいと思います。
2025.08.01 10:38
jjon-comさん 
AP プラチナマイスター
(No.4)
> よく『顧客1ーーー*注文』のような関係が出てきます
> 『顧客1人(1)に対し、注文は複数(*)ある』は理解できます

いいえ,間違っています。
上記の表記は,次の(a)と(b)という異なる概念を一つにまとめて表記したものです。

(a) 顧客 ーーー*注文
    「(ある1つの顧客レコードに対して)複数の注文レコードが対応する」
    「1人の顧客は複数の注文ができる」

(b) 顧客1ーーー 注文
    「(ある1つの注文レコードに対して)1つの顧客レコードだけが対応する」
    「注文レコードには顧客が1人だけ書かれている。複数の顧客による共同注文はない」

ですから,
『顧客1ーーー*注文』の意味は,2つの文によって正しく説明できます。
これを1つの文で説明しようとすると,不正確だったり曖昧だったりすることになります。
2025.08.01 12:47
jjon-comさん 
AP プラチナマイスター
(No.5)
ですから、
『顧客1ーーー*注文』と『注文*ーーー1顧客』はまったく同じです。

『注文*ーーー1顧客』を
『複数の注文(*)は、顧客1人(1)になる』と解釈することが間違いです。
2025.08.01 13:24
おにじさんさん 
(No.6)
jjon-comさんが正確じゃないかと思います!ぼくも悩んだ部分なので、くわしく書いてみます。

具体的に書きます。
たとえば、顧客を顧客コードで管理、注文を注文番号で管理してるとします。ここで、
顧客コードAさんが注文番号1番を注文。
顧客コードAさんが注文番号2番を注文。
顧客コードAさんが注文番号3番を注文。
顧客コードBさんが注文番号4番を注文。
顧客コードBさんが注文番号5番を注文。
顧客コードBさんが注文番号6番を注文。
したとします。このパターンがありえるのは同意してもらえますね?

この関係を書きだすと、
顧客コードひとつに対して、注文番号は複数あります(Aさんは1、2、3番を注文。Bさんは4、5、6番を注文)。
注文番号ひとつに対して、顧客コードはひとつですね(1番を注文したのはAさんだけ。2番を注文したのはAさんだけ。以下省略)。
ということになります。

この関係を、1対多と言います。UMLではリンクのように表記します。ER図でも同じ概念があります。

つまり、おそらくは、jjon-comさんと同じじゃないかと思い、はじめのように書きました!
2025.08.01 20:03
おにじさんさん 
(No.7)
ひとつ抜けてました。このようなわけで、左右を入れ替えたところで、関係性は変わりません。つまり、左右を入れ替えたものも同じ意味になります。
2025.08.01 20:09
八王子さんさん  
(No.8)
jjon-comさん
ありがとうございます。確かに
顧客 ーー*注文(ひとつの顧客に注目すれば注文は多)
顧客1ーー 注文(ひとつの注文に注目すれば顧客は1)
と分けて考えればしっくりきます。
つまり同時に「1 : 多」考えるから上手くいかなかったのですね。

おにじさんさん
ありがとうございます。
「jjon-comさんが正確だと思います」という意味ですよね?凄い否定から入られたのかと思いました笑
なるほど、確かに実際に書くと分かりやすいですね。

GinSanaさんはじめ、皆様本当にありがとうございます。
2025.08.02 01:07

返信投稿用フォーム

※SQL文は全角文字で記載してください。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む記事の投稿はできません。

投稿記事削除用フォーム

投稿番号:
パスワード:

その他のスレッド


Pagetop