SQL:在UML / ERD中建模多关系的正确方法

时间:2015-07-01 23:45:37

标签: sql uml erd

如何为此示例执行UML

Order(ID, user_id, invoice_user_id) where user_id and invoice_user_id are foreign keys and user_id != null

两个用户都存储在同一个实体中。基数如何或UML原则如何?我猜是这样的:

[Order]0..n--1..2[User]

所以订单可以有2个用户。另一个选择(我希望你理解我的文字图片......) 这应该意味着订单最多可以有2个用户。或者这样做是对的:

[Order]n -- 1[User] |n |1 [(Invoice)User]

一个用户可以拥有多个订单和/或可以是许多订单的发票用户......

1 个答案:

答案 0 :(得分:1)

您应该命名未命名的关联端属性并使用两个单独的关联。您拥有它的方式,无法与其他Invoice User分开到User。这些用户究竟是什么?您可能需要进行更多分析以了解所涉及的角色。这是我的猜测:

  • 卖方创建任意数量的发票
  • 买方收到任意数量的发票
  • 一位买家收到的发票
  • 一位卖家
  • 创建的发票

这给你一个这样的模型:

 ------
|Seller|
 ------
 1 | creatingSeller
   |
 * | createdInvoice
 -------  *                              1  -----
|Invoice|----------------------------------|Buyer|
 -------  receivedInvoice   receivingBuyer  -----

现在您可以导航到两个“用户”。

BTW,BuyerSeller都可能是代理人扮演的角色,例如PersonOrganization。我不打算为你塑造整件事。

您也知道,还有其他方法可以在RDBMS中实现此模型,使用“参考数据”/“枚举文字”来区分两个关联和代理的两个角色。您的原始问题表明您需要更多物理模型,但我认为您通过跳过分析模型来解决问题,这可以在RDBMS中实现。