几天来,我一直在尝试为我的问题提出解决方案,但没有运气。我希望有人能帮助我。如果描述太长,我很抱歉。
我想建立一个网站,客户可以在其中选择这些产品并可以订购它们的任意组合。
产品一:
完全定制的产品(即使不是所有信息对表结构都很重要,我也会详细描述定制过程)
客户可以从组件列表中组装产品,并且:
- 有两种类型的组件 - 主要组件和辅助组件
- 每个组件都有特定的重量和价格
- 主要组件由辅助组件组成,但它们的权重与单独列出时不同(对于跟踪哪个组件的销售量很重要)
- 每个产品必须恰好包含 1 个主要成分,并且可以包含 0 到多个补充成分
- 辅助成分的总重量总是 <= 主要成分的重量
- 主成分最终重量按“原主成分重量-辅成分总重量”计算
例如。
添加主要成分MC(重量1000g)
添加Sup。组分 1 (重量 100g)
添加 Sup. 组分2(重量200g)
最终产品包括:
主要成分 MC 700g
Sup。组分 1 100g
Sup. 组分 2 200g
每个产品都有唯一的代码(原因稍后解释)。
产品乙:
预组装并直接购买的产品(由组件制成,但组件的重量可能与在组装模块中单独列出时的重量不同)
产品C:
其他与组件无关的物品 - T 恤、马克杯
我的问题是 - 在以下情况下,存储这些项目的订单最有效的数据库结构是什么:
- 我需要显示特定订单的所有订单项目,当存在产品 A 时,列出它的所有组件和主要组件的组件
- 我需要能够通过代码重建已经购买的定制产品(产品 A),并在它们不再有库存/可用时移除单个组件
- 所有组件的重量和价格可以随时间变化+主要组件的组件和产品B也可以改变
- 我需要能够跟踪每个组件的销售量以及销售时间
到目前为止,我有以下数据库结构,但我认为我没有走在正确的轨道上:
成分
- 身份证(PK)
- 姓名
- 价格
- 重量
订单(不相关的列,如 number、customer_firstname、delivery_method 等省略)
- 身份证(PK)
order_items(所有产品类型共有的字段)
- 身份证(PK)
- order_id(FK 到 orders.id)
- 代码
- 姓名
- 价格
- 数量
order_producta
- 身份证(PK)
- order_item_id(FK 到 order_items.id)
- component_id(FK 到 components.id)
- 数量
- 价格
- 重量
非常感谢您的回复。如果我解释不清楚,我很乐意用其他信息编辑我的问题。