【问题标题】:UML confusion on Many to Many scenario多对多场景中的 UML 混淆
【发布时间】:2012-02-01 15:29:31
【问题描述】:

这是我的示例类图

cls_Invoice = {InvoiceID:int, InvoiceDate:Date, InvoiceProduct:cls_Products};

cls_Products = { ProductID:int, StockQuantity:double , Price:double};

数据库表

Invoice = { InvoiceID, InvoiceDate}; Products = { ProductID, StockQuantity, Price};

一张发票包含许多产品 1 产品可以在许多发票中 所以最终在 ER 设计中会有一个链接,如下所示

Invoice_Products = {InvoiceID, ProductID, Qty, Price}

但是现在还有另外两个属性 Qty 和 Price 我不知道如何绘制类图请指教?

【问题讨论】:

  • 这看起来不对:您的“类图”说发票有一个产品。你使用什么语言?使用您最喜欢的 UML 工具更好地绘制图表,或使用例如爪哇。我也不明白 cls_* 和“数据库表”之间的关系。
  • 我一直在使用 C# 但我已更改为 FLEX !我提到 cls 指出它们是类我不明白的是如何将多对多 ER 实体映射到类图中;我知道它是围绕第一类图的另一种方式,然后是 ER,但我仍然试图弄清楚它是如何工作的?

标签: database uml class-diagram er-diagrams


【解决方案1】:

在 UML 类图中,您将有两个类:Invoice 和 Product。 Invoice 有两个属性:InvoiceID 和 InvoiceDate,Product 有三个属性:ProductID、StockQuantity 和 Price。在两个类之间需要一个关联,两端的重数为 1..*。

【讨论】:

    【解决方案2】:

    虽然我对购物应用不是很熟悉,但是一想起来,我就想到了这几点:

    出售的商品/产品应该有另一个概念,而不是商品/产品。因为,“产品的概念”应该独立于“可以对产品做什么”。例如,销售产品与产品本身不是同一个概念。因此,您可能有另一个类,例如 orderItem。

    class product {
        Long productId
        String productName
        ...
    } 
    
    class orderItem{
          Product soldProduct;
          Invoice itsInvoice;
    
          public Invoice getItsInvoice();
    
    }
    
    class Invoice {
        Long invoiceNumber;
        List<OrderItem> orderItem;
    
    }
    

    如果您这样做,那么每个订单商品只属于一张发票,而一张发票可能有很多订单商品。因此,ivoice和order item是一对多的关系,oreritem和product是一对一的关系。

    即使您仍然只使用发票和产品这两个实体,这意味着您将“产品”和“销售产品”的概念结合在一个实体中,发票和产品之间的关系仍然是一对一的-很多不是多对多。因为,两者之间的关系是通过“销售产品”。在这种情况下,“已售产品”仅属于一张发票。

    但是,第一种方法对我来说似乎更好。

    【讨论】:

      【解决方案3】:

      这是一对多方案,而不是多对多方案。同一产品不能成为多张发票的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        相关资源
        最近更新 更多