订单表结构,mysql

时间:2011-07-30 15:44:33

标签: mysql structure

简单的问题 - 如何组织订单表,即当有人订购id = 1的2x商品和id = 2的3x商品时。

我之前的解决方案是将其保存为2x1,3x2列中的products,然后将其展开(),但效率非常低。

3 个答案:

答案 0 :(得分:4)

我会选择3张桌子:

  • product表 - 与订购系统完全独立,并且网站仅用于展示产品
  • 一个order表,用于存储订单的基本信息(如订购者,帐单邮寄地址......)
  • 这两者之间的order_product联接表,为每个订单指示它包含哪些产品,以及数量。


最后一个表至少包含以下字段:

  • id_order:订单的标识符
  • id_production:产品的标识符
  • quantity:按此订单购买此产品的次数

答案 1 :(得分:0)

我认为接受的答案非常好,但我也会用customers表扩展它。

这是我计划用于项目的结构的一个更完整的例子(尚未测试)......

CUSTOMERS table:
    _id
    name
    address
    tel
    email

PRODUCTS table:
    _id
    name
    price

ORDERS table:
    _id
    customer_id
    datetime

ORDER_PRODUCTS table:
    _id
    order_id
    product_id
    product_quantity

...所以,基本上,如果顾客在他的订单中有3种不同的产品(例如,1个苹果,2个香蕉和4个帽子),那么我们会看到1行被添加到ORDERS表中并且将3行添加到ORDER_PRODUCTS表。

答案 2 :(得分:0)

这是另一个建议,进一步扩展了:

客户表:

id
name 
email
timestamps  (created, modified, deleted)

客户地址:

id
customer_id
street
zip_code
city
state
country
type (enum or varchar indexed  - options would be 'billing', 'shipping')

订单:

id
customer_id
subtotal (without taxes, discount, shipping, etc.)
total (including additional order line items)
billing_address_id (foreign key from customer_addresses) 
shipping_address_id (foreign key from customer_addresses) 
status (paid, checkout, canceled, failed, expired...)
payment type
timestamps (created, modified, deleted)

order_items

id
order_id
item_id
item_quantity
price 

order_line_items(可选,将在其中存储运输,折扣,税收等额外费用)

id
order_id
type
amount
timestamps