购物车订购表

时间:2011-04-24 10:25:23

标签: mysql database-design relational-database

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

这些是主要产品表:

项目表

  • item_id(p)
  • ITEM_NAME
  • ITEM_DESCRIPTION

注意:商品价格位于item_options表

item_options表

  • option_id(p)
  • item_id(f)
  • OPTION_NAME
  • option_price

item_extras表

  • extras_id(p)
  • option_id(f)
  • extras_name
  • extras_price

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

订单表

  • orders_id(p)
  • customer_id(f)
  • address_book_id(f)(送货地址)
  • date_purchased
  • orders_status
  • orders_date_finished

order_items表

  • orders_items_id(p)
  • orders_id(f)
  • item_id(f)
  • item_name(从项目表中复制)
  • 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)
  • extra_name
  • extra_price

1 个答案:

答案 0 :(得分:1)

我想对此数据库架构提出两种可能的优化。

首先,是否有任何额外内容适用于两个不同的选项,例如选项和附加组件有多对多的关系?如果是这样,您需要添加具有以下结构的链接表:

 optionExtras
 optionId, pk
 extraId, pk

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

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

您还可以更进一步,并使用有效列来表示输入特殊代码的用户可以使用的产品,例如:标记这些产品有效= 2.

无论如何,这些都是我的想法,希望它们有所帮助!