【问题标题】:SQL/PHP: Table design questionSQL/PHP:表格设计题
【发布时间】:2009-07-03 23:58:45
【问题描述】:

我有两张桌子,一张叫“cart”,一张叫“items”。现在我希望购物车能够存储“项目”和数量的列表。所以我创建了另一个表“cart_items”,其中包含模板 ID、项目 ID 和数量的字段。

这是好的设计,还是我应该为“cart_item”的 id 添加另一个字段?还是有更好的方法可以一起完成这一切?当我尝试更新我的购物车时,我只是遇到了麻烦,我的购物车项目没有正确更新。我要做的是删除 all 附加到购物车的“cart_item”,然后重新添加每个“cart_item”,我不禁认为必须有更好的方法这样做。

【问题讨论】:

    标签: php sql


    【解决方案1】:

    这是非常好的设计。

    在 ER(实体关系)术语中,商品和购物车之间存在多对多的关系。我的意思是一个项目可以出现在许多不同的购物车中,一个购物车可以包含许多不同的项目。在这种情况下,“很多”是指“一个可以多于一个的可变数字”。

    您的 cart_items 表是所谓的连接表,您需要它来建模多对多关系。添加数量字段也很有意义,就像将其放在 cart_items 上一样。

    当涉及到密钥时,您有两种选择:

    1. 将 (cart_id, item_id) 设为主键。这称为复合主键;或
    2. 创建一个名为 id 的自动增量字段。如果您这样做,则使 (cart_id, item_id) 成为唯一索引以强制唯一性。

    任何一个选择都是有效的。我个人更喜欢(2)。您还应该在 (item_id, cart_id) 上有一个唯一索引。

    【讨论】:

      【解决方案2】:

      我不确定您的表格的具体外观,但如下所示将是一个好的开始。

      Items 
      +-- ID --+-- Description --+-- Etc --+
      |       1|  Good item here | Buy one.|
      |       2|    Another item | somethin|
      
      
      Cart
      +-- Cart ID --+-- Item ID --+-- Amt --+ 
      |            1|            1|        4|
      |            1|            2|        3|
      

      每个购物车都有一个唯一的 ID,每件商品都存储在自己的行中。通过这种方式,您可以一次添加或删除一个项目,同时保持它们之间的链接,还可以同时从一个购物车中选择所有项目。

      【讨论】:

        【解决方案3】:

        我要给您的一个建议是,您不要将购物车直接链接到商品,而是将所有相关信息从商品复制到另一个表(可能是 cart_Items)中,然后将其链接到购物车。这很有用,因此您可以随着时间的推移维护添加到购物车的内容。除非这些只是您只需要一次会话的快速扔掉的购物车,否则您希望能够准确了解该人在该时间点放入购物车的确切历史,并且不会在有人时更改他们的购物车数据决定更改项目的某些内容,或者在项目被删除时让项目消失。

        【讨论】:

          【解决方案4】:

          如前所述,您所做的是正确的。 唯一缺少的是在您的数据库中使用 DELETE CASCADE 和 FOREIGN KEYS

          这样,当您在 CART 中删除一行时,它也会在 CART_ITEM 中删除它。

          【讨论】:

          猜你喜欢
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-12
          • 2023-03-26
          相关资源
          最近更新 更多