我正在开发在线购物车系统。现在我需要处理将项目/篮子添加到订单表中。我想确定我是否走正确的道路?
这些是主要产品表:
项目表
注意:商品价格位于item_options表
中item_options表
item_extras表
以下是订单表。如您可以看到项目名称,选项名称和附加名称,价格将被复制到订单表中。如果任何项目名称或价格发生变化 - 它不会影响订单表。例如,发票不会受到影响。
订单表
order_items表
order_extras表
答案 0 :(得分:1)
我想对此数据库架构提出两种可能的优化。
首先,是否有任何额外内容适用于两个不同的选项,例如选项和附加组件有多对多的关系?如果是这样,您需要添加具有以下结构的链接表:
optionExtras
optionId, pk
extraId, pk
然后通过删除optionId字段来更改extras表。这可以消除潜在的冗余。
其次,不是重复项目名称,选项名称和额外名称,而是为什么不在每个标题为active的表中添加一个布尔(0-1)行,表示当前可以在订购时选择每个表中的哪些条目。这样可以避免额外的冗余,并且可以重新设置产品,而不会对旧发票的信息产生任何影响。如果要更改产品的价格或名称,只需将当前活动记录关闭,然后插入包含新信息的新记录。旧订单显然仍指向未激活的条目的正确ID。
您还可以更进一步,并使用有效列来表示输入特殊代码的用户可以使用的产品,例如:标记这些产品有效= 2.
无论如何,这些都是我的想法,希望它们有所帮助!