【问题标题】:How to store complex product/order data in MySQL?如何在 MySQL 中存储复杂的产品/订单数据?
【发布时间】:2013-12-21 05:09:41
【问题描述】:

我正在为我的网上商店开发一个订单系统。我有 2 张桌子:

  1. 产品,存储产品信息
  2. 订单,存储客户订单的一般 ID 和信息。

现在我想有一种方法可以在数据库中存储复杂的客户订单。我需要一些东西,让我知道每个产品的每种尺寸(S、M 或 L)在订单中的数量。

棘手的部分是我希望能够添加/编辑/删除产品(当然不影响过去的订单),所以方法应该灵活

我该怎么办?

  1. 每个订单都有一个单独的表格,以产品为行?
  2. 一个表格用于所有订单,以产品为列?
  3. 其他选项?

谢谢!

【问题讨论】:

    标签: php mysql sql database relational


    【解决方案1】:

    取决于您的购物车目标。例如,您想允许客人购买吗?即用户无需登录即可购买?

    附上的图片是我一直在做的设计,它是这样的:

    1. 访问者从网站中选择产品并将这些产品添加到会话购物车(只是一个临时存储产品、产品数量和价格等的地方)

    2. 一旦客户准备好结账,我们就创建订单、订单人员和 person_address(产品必须交付到的地方),并将项目添加到 order_item 表中。所有这些信息都是由客户在结帐页面中添加的。

    3. 最后一步是提供支付方式:paypal、信用卡等。

    我喜欢这种设计的地方是用户没有义务向我们注册。 Order_person 充当用户和订单之间的一种接口。如果注册,我们只需将 order_person 链接到用户表...

    我也包含了结帐页面的示例前端。

    【讨论】:

    • 这真的很有帮助!我不明白的一件小事是 rbu_user_id 是什么意思?
    • 好问题,还有一个用户表(role_based_user)指向订单人员(为了清楚起见,我应该包括它)。当用户注册时,它们存储在用户表中,当他们进行购买时,详细信息会链接到他们的 order_person(可能会有所不同)。如果有人决定不注册,他们的详细信息将存储在 order person 表中。
    • 在某些情况下,用户可能会发起付款、取消付款并返回尝试编辑订单,然后再继续发起另一笔付款。如果根据您的方法,订单是在付款完成之前创建的,如何编辑它?
    • 确实需要创建订单才能将付款链接到订单 ID。如果用户希望更新订单,创建新订单应该不会太难......
    【解决方案2】:

    至少你需要:

    Products (one row per product)
        ProductID
        Size
    
    Orders (one row per order)
        OrderID
    
    OrderDetails (one row per product per order)
        ProductID
        OrderID
        Size
    

    请注意,每个“尺寸”都是其自己的 ProductID。您可能还需要另一个 ID,用于对属于相同“基本”产品但尺寸不同的产品进行分组。

    所以如果订单#1 有三个产品,订单#2 有四个,那么OrderDetails 将有七行:

    OrderID ProductID Quantity
    1       234       2
    1       345       9
    1       456       30
    2       432       1
    2       234       65
    2       654       8
    2       987       4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2018-03-30
      • 2020-12-05
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多