我遇到了一个问题,我想问你一些方向。我有数据库,如下图所示。
1 在我的应用程序中,我有预定义的产品,因此它们在文本框中自动弹出,取决于第一个字母。我的问题是每种产品都有多种颜色可供选择。我不知道如何制作一张合适的桌子。我应该只使用颜色制作一张桌子吗?
2 假设客户订购了5台显示器和4个同一订单上的键盘。我应该在哪里有数量?在我的OrderProduct表中?
第3 如果客户想要在所选项目上打印自定义标签或其徽标,该怎么办?如果我在我的应用程序中选择打印项目或贴纸,那么应该在数据库中存储哪些内容?还在OrderProduct上?
答案 0 :(得分:2)
添加一个名为Colors的表,并使其具有字段ID,可行名称等。在产品中显示它支持的颜色的按位值。
是的,您将拥有OrderProduct表中的数量。
这取决于他得到的贴纸类型。贴纸是他可以选择的贴纸还是他可以上传的东西?
如果您的客户需要能够自定义每个项目,那么您应该将每个项目作为单独插入到OrderProduct表中而不是具有数量字段 - 一旦您这样做,只需引用贴纸可以预定义或用户定义的id。
回到颜色 - 就像我说的,如果您能够自定义每个产品,然后为每个产品创建一个新的插入并删除数量列,然后只需将ColorID列添加到OrderProduct表中,您将在其中定义特定产品的颜色或定制。
对评论的回应
应用程序需要知道每个项目的颜色,因此您可以使用黑色和灰色键盘,同时使用黑色和红色显示器。除了数字之外,按位值就像标志系统。让我们说你有......
1 | Black
2 | Gray
3 | Red
如果产品有黑色和灰色,你可以做黑色,灰色到1,2。如果产品有黑色和红色,你会做黑色,红色到1,3。所有按位值都将其转换为计算机可以更容易理解的值。
所以要获得Black&的按位值灰色你将ID加在一起并将它们加在一起(bor)。一旦你有了这个值(这是一个按位值)你可以在它上面运行band以查看它是否有那种颜色。
This是关于PHP的bitwise的一个非常好的教程,我建议阅读它以获取有关该主题的更多信息。
答案 1 :(得分:0)
数据库解决方案可能有所不同;如果您事先不知道变体类型是什么,请参阅this在SO上的答案以获取我的推荐,如果您这样做,请this。
根据您使用的解决方案,您可以在product_order表中包含对变体的引用。
此解决方案允许您扩展未来产品类型的解决方案而不会污染“product_order”表 - 如果您使用@Hans的建议包含一个位掩码来指示颜色,并且您将尺寸作为另一个维度引入,很快就会产生“product_order” “表开始包含很多产品结构知识,很难管理/验证。
是的,数量通常包含在order_product表中(这通常称为“orderlines”)。包含单价也是一个好主意 - 产品价格可能随时间变化,并且您希望记录客户在下订单时同意的价格。
对于自定义,您可能需要创建“order_customization”表,其中包含指向order_product表的链接以及所选的自定义,例如,
OrderID ProductID自定义 1 2蓝色贴纸 1 1绿色贴纸
据推测,并非订单上的所有商品都可以进行自定义;如果单个order_product行的数量> gt; 1可以为每个项目进行不同的自定义,你必须进一步拆分......