如何获得所有产品的订单

时间:2015-12-18 21:23:38

标签: mysql database-design

我对MySQL中的订单表设计有疑问。 我有像

这样的ORDERS表
Order_id | Customer_id | Total_Price | 
--------------------------------------

另一方面,我有表PRODUCT

Product_id | Product_name | available_amount 
------------------------------------------

订单可以包含多种不同的产品。 那么,我如何更改或更新我的数据库设计,就像我可以使用其所有产品高效访问任何订单? 我应该创建单独的表名Order_details吗?你能帮我吗?

3 个答案:

答案 0 :(得分:4)

是的。您将需要创建一个单独的表,如您所提到的,将订单及其所有产品汇总在一起,如下所示:

    Order_Product_id | Order_id | Product_id
    ----------------------------------------
    1                | 1        | 1
    2                | 1        | 3
    3                | 1        | 5
    4                | 2        | 3
    5                | 3        | 1
    6                | 3        | 2

然后您可以获得订单中的所有产品:

Select op.Order_id, p.Product_id, p.Product_name 
FROM Product p 
JOIN Order_Product op ON op.Product_id = p.Product_id
WHERE op.Order_id = 1

答案 1 :(得分:1)

你可以看到this

您的订单中包含多种产品,而产品可能只有一个或多个订单,那么您就拥有多对多的关系。

您只需要使用此架构添加新表 order_products(id,order_id,product_id)

  • id ,使行唯一
  • order_id 您拥有的任何订单的外键
  • product_id 任何产品的外键,但在此处它将与此 order_id
  • 相关

答案 2 :(得分:0)

是的,订单和产品之间的关系是多对多的,所以你必须通过做第三个名为order_products或order_details的表来打破这种关系,这个表有order_id,product_id作为外键。 您还应该为此表添加数量字段和sales_price字段。 此外,您不应将total_price放在订单表中,但您可以通过第三个表中的总和(数量* sales_price)字段计算总数。