简单的问题 - 如何组织订单表,即当有人订购id = 1的2x商品和id = 2的3x商品时。
我之前的解决方案是将其保存为2x1,3x2
列中的products
,然后将其展开(),但效率非常低。
答案 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