0

我遇到了一个问题,想请教您一些方向。我有如下图所示的数据库。 在此处输入图像描述

1 在我的应用程序中,我预定义了产品,因此它们会在文本框中自动弹出,取决于第一个字母。我的问题是每种产品都有多种颜色可供选择。而且我不知道如何制作一张合适的桌子。我应该只用颜色制作一张桌子吗?

2 假设客户订购了 5 个显示器和 4 个键盘,它们都在同一个订单上。我应该在哪里有数量?在我的 OrderProduct 表中?

3 如果客户想要在所选商品上印上自定义贴纸或他的标志怎么办?如果我在我的应用程序中选择在项目或贴纸上打印,这应该存储在数据库中的什么位置?也在 OrderProduct 上?

4

2 回答 2

2
  1. 添加一个名为 Colors 的表,并让它具有字段 ID、可行名称等。在产品中显示它支持的颜色的按位值。

  2. 是的,您将在 OrderProduct 表中拥有 Quantity。

  3. 这取决于他得到什么样的贴纸。贴纸是他可以选择的,还是他可以上传的?

如果您的客户需要能够自定义每个项目,那么您应该将每个项目作为单独的插入到 OrderProduct 表中,并且没有数量字段 - 一旦您这样做,只需引用贴纸 id 即可是预定义的或用户定义的。

回到颜色 - 就像我说的那样,如果您要能够自定义每个产品然后为每个产品创建一个新插入并删除一个数量列,然后只需将一个 ColorID 列添加到 OrderProduct 表中,您将在其中定义什么颜色或定制的特定产品将具有。


对评论的回应

应用程序需要知道每个项目的颜色,因此您可能在拥有黑色和红色显示器的同时拥有黑色和灰色键盘。位值就像一个标志系统,除了数字。可以说你有...

1 | Black
2 | Gray
3 | Red

如果一个产品可以有黑色和灰色,你会做黑色,灰色到 1,2。如果一个产品有黑色和红色,你会做黑色,红色到 1,3。按位值所做的只是将其转换为计算机可以更容易理解的值。

因此,要获得 Black & Gray 的按位值,请将 ID 平方并将其相加(bor)。一旦获得该值(即按位值),您就可以对其运行 band 以查看它是否具有该颜色。

是一个非常好的 PHP 逐位教程,我建议阅读它以获取有关该主题的更多信息。

于 2013-04-09T22:16:35.883 回答
0
  1. 您描述的问题-“产品”有多种颜色可供选择-很常见;标准解决方案是引入“产品变体”的概念。例如,T 恤有多种颜色和多种尺寸可供选择;鞋子有多种尺寸等可供选择。

数据库解决方案可能会有所不同;如果您事先不知道变体类型是什么,或者如果您知道的话,请参阅 SO 上的这个答案以获得建议

根据您使用的解决方案,您可以在 product_order 表中包含对变体的引用。

此解决方案允许您在不污染“product_order”表的情况下扩展未来产品类型的解决方案 - 如果您使用@Hans 的建议来包含一个位掩码来指示颜色,并且您将尺寸作为另一个维度引入,那么您的“product_order”表很快就会启动包含很多关于产品结构的知识,并且变得难以管理/验证。

  1. 是的,数量通常包含在 order_product 表中(这通常称为“订单行”)。包含单价也是一个好主意 - 产品的价格可能会随着时间而变化,并且您希望记录客户在下订单时同意的价格。

  2. 对于自定义,您可能希望创建一个“order_customization”表,其中包含指向 order_product 表的链接以及选定的自定义,例如

    OrderID ProductID 定制 1 2 蓝色贴纸 1 1 绿色贴纸

据推测,并非订单上的所有商品都有定制;如果数量 > 1 的单个 order_product 行可能对每个项目有不同的自定义,则您必须将其进一步拆分...

于 2013-04-10T09:41:19.037 回答