UML混淆了很多场景

时间:2012-02-01 15:29:32

标签: database uml class-diagram er-diagrams

这是我的示例类图

  

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

     

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

数据库表

  

Invoice = {InvoiceID,InvoiceDate};产品= {ProductID,StockQuantity,Price};

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

  

Invoice_Products = {InvoiceID,ProductID,Qty,Price}

但现在还有另外两个属性Qty和Price,我不知道在绘制类图时请咨询一下吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

虽然我对购物应用程序不是很熟悉,但是当我想到它时,我会想到这些点:

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

class product {
    Long productId
    String productName
    ...
} 

class orderItem{
      Product soldProduct;
      Invoice itsInvoice;

      public Invoice getItsInvoice();

}

class Invoice {
    Long invoiceNumber;
    List<OrderItem> orderItem;

}

如果您这样做,那么每个订单商品只属于一个发票,而发票可能有许多订单商品。因此,ivoice和订单项之间存在一对多的关系,以及oreritem和product之间的一对一关系。

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

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

答案 2 :(得分:-1)

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