【问题标题】:Shopping Cart ordering tables购物车订购表
【发布时间】:2011-04-24 10:25:23
【问题描述】:

我正在开发在线购物车系统。现在我需要将项目/篮子添加到订单表中。我想确定我是否走在正确的道路上?

这些是主要产品表:

项目表

  • item_id (p)
  • item_name
  • item_description

注意:物品价格在 item_options 表中

item_options 表

  • option_id (p)
  • item_id (f)
  • 选项名称
  • option_price

item_extras 表

  • extras_id (p)
  • option_id (f)
  • extras_name
  • 附加价格

以下是订单表。正如您所看到的项目名称、选项名称和附加名称,价格被复制到订单表中。如果任何项目名称或价格发生变化 - 它不会影响订单表。例如,发票不会受到影响。

订单表

  • orders_id (p)
  • customer_id (f)
  • address_book_id (f)(用于收货地址)
  • 购买日期
  • orders_status
  • orders_date_finished

order_items 表

  • orders_items_id (p)
  • orders_id (f)
  • item_id (f)
  • item_name(从 items 表中复制)
  • item_description(从项目表复制)
  • option_id (f)
  • option_name(从 item_options 表复制)
  • option_price(从 item_options 表复制)

order_extras 表

  • order_extras_id (p)
  • orders_id (f)
  • orders_items_id (f)
  • extras_id (f)
  • 额外的名字
  • 额外价格

【问题讨论】:

    标签: mysql database-design relational-database


    【解决方案1】:

    我想对这个数据库架构提出两个潜在的优化。

    首先,是否有任何附加功能可以应用于两个不同的选项,例如options 和 extras 是多对多的关系吗?如果是这样,您需要添加具有以下结构的链接表:

     optionExtras
     optionId, pk
     extraId, pk
    

    然后,您可以通过删除 optionId 字段来更改 extras 表。这可以消除潜在的冗余。

    其次,与其重复项目名称、选项名称和额外名称,为什么不在每个表中添加一个 boolean (0-1) 行,标题为 active,表示当前可以在订购时选择每个表中的哪些条目.这样可以避免额外的冗余,并且可以重新安装产品,而不会对旧发票上的信息产生任何影响。当您想要更改产品的价格或名称时,您只需将当前活动记录关闭,然后插入包含新信息的新记录。旧订单显然仍然指向未激活的条目的正确 id。

    您还可以更进一步,使用活动列来表示可供输入特殊代码的人使用的产品,例如将这些产品标记为有效 = 2。

    不管怎样,这些都是我的想法,希望对你有帮助!

    【讨论】:

    • 感谢 Gordon 的详细回复,我想确保我理解正确。您的意思是添加一个名为“optionExtras”的新表吗?我不明白这种潜在的如何消除冗余?产品的工作方式:一个项目可以有很多选项。一个选项可以有很多额外的东西。其次,关于布尔值,您的意思是像 items.active、item_options.active 1 还是 0 ?这真是个好主意,谢谢你:)
    • 如果我更改产品的价格或名称,我会将活动记录设置为关闭,然后用新记录插入一条新记录,但这意味着我必须更新 item_options.item_id 中的新 item_id ( FK) 表?
    • 是的,一个名为 optionExtras 的新表。正如您所说,一个项目可以有很多选项,一个选项可以有很多附加功能。但是选项 1 可以与选项 2 或选项 3 具有相同的附加功能吗?或者一些相同的选择?在这种情况下,您使用链接表来简化这种多对多关系是解决重复相同信息两次可能性的最佳方法。
    • 不利的一面是,当您想要更改某些内容时,您必须为新项目添加所有选项。您可以轻松地编写一个函数来根据您对 items 表的更新为您更新它。
    猜你喜欢
    • 2018-03-01
    • 2013-12-13
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多