我有这些表,组织可以是许多消息的发送者或接收者,味精可以有2个发送或接收消息的组织。我知道我的数据库没有意义,但是我无法更改它:



那么,我是否将SenderReceiver以1对2的方式连接到Msg,将组织以n对1的方式连接到SenderReceiver?或反之亦然n-to1和1-to-n?

发件人:

public class Senderreceiver implements java.io.Serializable {

        private Set<Organization> organizations = new HashSet();
        private Set<Msg> msg = new HashSet();


xml文件:

<set fetch="select" inverse="true" lazy="true" name="msgs" table="MSG">
      <key>
        <column name="MsgID" not-null="true"/>
      </key>
      <one-to-many class="entity3.Msg"/>
    </set>



<set fetch="select" inverse="true" lazy="true" name="organizations"  table="ORGANIZATION">
      <key>
        <column name="OrganizationID" not-null="true"/>
      </key>
      <one-to-many class="entity3.Organization"/>
    </set>


讯息:

public class Msg implements java.io.Serializable {

        private Senderreceiver senderreceiver;


xml:

<many-to-one class="entity3.Senderreceiver" fetch="select" name="senderreceiver">
      <column name="SenderReceiverID" not-null="true"/>
    </many-to-one>


组织:

public class Organization implements java.io.Serializable {

        private Senderreceiver senderreceiver;


xml:

 <many-to-one class="entity3.Senderreceiver" fetch="select" name="senderreceiver">
          <column name="SenderReceiverID" not-null="true"/>
        </many-to-one>


任何帮助将不胜感激。提前致谢!

最佳答案

我建议这样做:

如我所见,这是2-N关系。一个组织可以发送许多消息,而一个消息只能由一个或两个组织发送或接收。您不需要连接表。

在组织中放置一组消息-这将代表组织发送/接收的消息。您还可以制作2套-sentMSGSreceivedMSGS

并在邮件本身中放入组织的FK,因为这将代表邮件的组织。您可以在消息中放入sentIDreceviedID

我认为这将使对表格和程序的理解更加容易。

如果您选择保留原始关系,则多对多关系将显示为:

1-N-1(Organization-SenderReceiver-Msg)。

Organization-SenderReceiver是1-N
SenderReceiver-Msg是N-1。

因此,您将SenderReceiver的集合放在OrganizationMsg类中。并且Organization中的MsgSenderReceiver的对象。

10-07 13:19