このようなものが必要な状況が 2 つあります。私のモデルでは、Message
one または two に関係する がありますPersons
。Addresses
さらに、メッセージには 2 つの 、つまり fromAddress
と toが関連付けられていますAddress
。
2 つの最初の状況では、1---1..2 の多重度との間の関連付けを指定するか、1---1 との関連付けと 1---0 との関連付けの 2 つの関連Persons
付けを指定したいと思います。 1. ただし、多重度を 2 に設定することはできません (または方法がわかりません)。制約を最大 2 に設定して 1--* に設定できる可能性があると想像できます (ただし、その方法はわかりません)。
2 つの関連付けを追加すると、側面を見ると少し奇妙に感じます。これは、両方の関連付けに 1 があり、関連する2 つが必要であることを示しているためです。両方のアソシエーションの側に 0..1 のようなものが必要かもしれませんが、それらに xor 制約があるかどうかはわかりませんが、それが良い習慣なのか、EF で可能なのかさえわかりません。
Message
Person
Message
Person
Messages
Message
Address
2 番目の状況では、常に fromと常に toがあることを除いて、問題は非常に似ていAddress
ます。多重度を 1--* に設定するのは、私には正しくないようです。ここでは、from 関連付けと to 関連付けの 2 つの関連付けが確実に存在する必要があると思います (両方ともAddress
エンティティに移動します)。Message
ただし、これは2 つの 1 または 2 つの 0..1 を持つ側で同じ問題を引き起こします。
私の質問は、EDM でこれを正しくモデル化するにはどうすればよいですか?
前もって感謝します。
更新 1:
質問を明確にするために、なぜそのようなモデルが必要なのかについて、少し背景情報を提供します。メッセージを作成できなければなりません。このメッセージでは、それが 1 人か 2 人かを特定する必要があります。これらの人の名前、姓、およびその他の一意でないプロパティを指定します (2 人が同じ名前を持つことができます)。これらすべてのプロパティをMessage
エンティティ (fname1、lname1、fname2、lname2) にダンプできますが、それは悪い考えのようです。したがって、Person
エンティティが生まれました。Person
ただし、これは多くのメッセージにリンクできるように見えるかもしれませんが、そうではありません。同じプロパティを持つ 2 人の異なる人物が存在する可能性があります。これらの人物が実生活で実際に同一人物であるかどうかを判断する方法はありません。
住所の場合も、同様の議論が成立します。2 つの住所の綴りは多少異なる場合がありますが、手紙に書いて郵送すると、どちらも同じ場所に届きます (例: sesamestreet または sesamestr.)。Address
したがって、複数の に接続された 1 つのエンティティはありませんMessages
。繰り返しますが、唯一の理由Address
は別のエンティティです。まったく同じプロパティを持つ em が 2 つあるからです。
データベース設計の観点からは、これは意味をなさないかもしれませんが、クラス図の観点からは、もう少し理にかなっているかもしれません。私は、EF の EDM はデータベース設計ではなく、ドメイン モデルのようなものであるべきだという印象を受けていたので、正しいことをしたと思います。
更新 2:
この場合、最善の方法と思われる方法を考えてみました。と の間にはほとんど違いがないので、と1..* の関連付けを許容できるようにしたいPerson1
とPerson2
思います。多くは2を意味するという事実は、下位層が処理するものになります。住所の場合、from と to はまったく異なります。どちらもアドレスですが、リストにできる気がしません。from アドレスと to アドレスを別々のエンティティに分割し、それらを from から継承させることができます。次に、各サブクラスに関連付けます。少しやり過ぎのように思えるかもしれませんが、ある時点で from アドレスは to アドレスとは異なる要件を持ち、したがって異なるプロパティを持つ可能性があると考えることができます。
Message
Person
Address
Message
私は 100% 満足しているわけではありません (特に住所部分)。この解決策は問題ないかもしれませんが、コアの問題を回避できるように感じます。