Database 如何正确构建数据库

Database 如何正确构建数据库,database,database-design,entity-relationship,Database,Database Design,Entity Relationship,我遇到了一个问题,我想问你一些方向。我的数据库如下图所示。 1 在我的应用程序中,我预先定义了产品,所以它们会自动弹出文本框,具体取决于第一个字母。我的问题是每种产品都有多种颜色。而且我不知道怎么做一张合适的桌子。我应该只做一张有颜色的桌子吗 2 假设客户订购了5台显示器和4个键盘,它们都在同一订单上。我应该在哪里有数量?在我的OrderProduct表中 3 如果客户希望在所选商品上打印自定义贴纸或其徽标,该怎么办。若我在我的应用程序中选择“在项目上打印”或“在标签上打印”,则应将其存储在数

我遇到了一个问题,我想问你一些方向。我的数据库如下图所示。

1 在我的应用程序中,我预先定义了产品,所以它们会自动弹出文本框,具体取决于第一个字母。我的问题是每种产品都有多种颜色。而且我不知道怎么做一张合适的桌子。我应该只做一张有颜色的桌子吗

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

3 如果客户希望在所选商品上打印自定义贴纸或其徽标,该怎么办。若我在我的应用程序中选择“在项目上打印”或“在标签上打印”,则应将其存储在数据库中的何处?还有订购产品吗

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

  • 是的,您可以在OrderProduct表中找到数量

  • 这取决于他得到的是什么样的贴纸。这个贴纸是他可以挑选的还是他可以上传的

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

    回到颜色——就像我说的,如果你想定制每个产品,那么为每个产品做一个新的插入,删除一个数量列,然后在OrderProduct表中添加一个ColorID列,在那里你将定义特定产品的颜色或定制


    评论回复

    应用程序需要知道每个项目的颜色,因此您可以使用黑色和灰色键盘,同时使用黑色和红色显示器。按位值类似于标志系统,除了数字。假设你有

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

    因此,要获得黑色和灰色的按位值,您需要将ID平方并将其相加(bor)。一旦你有了那个值(按位值),你可以在上面运行band,看看它是否有那个颜色

    这是一本非常好的PHP逐位教程,我建议您阅读它以了解有关该主题的更多信息

  • 你所描述的问题-一个“产品”有多种颜色-是常见的;标准解决方案是引入“产品变体”的概念。例如,T恤有多种颜色和多种尺寸;鞋有多种尺寸等
  • 数据库解决方案可能会有所不同;如果您事先不知道变体类型是什么,或者您是否知道,请参阅关于SO的答案,以了解我的建议

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

    此解决方案允许您在不污染“product_order”表的情况下扩展未来产品类型的解决方案-如果您使用@Hans的建议包括一个位掩码来指示颜色,并且您引入尺寸作为另一个维度,您的“product_order”表很快开始包含大量产品结构知识,而且它变得很难管理/验证

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

  • 对于定制,您可能需要创建一个“订单定制”表,其中包含指向订单产品表的链接,以及所选定制,例如

    OrderID产品ID定制 1 2蓝色贴纸 1绿色贴纸


  • 据推测,并非订单上的所有项目都有定制;如果数量大于1的单个订单产品线可能对每个项目有不同的定制,您必须将其进一步细分…

    谢谢。客户将不会与应用程序有任何联系。对于贴纸,我的意思是定制,当插入订单及其项目时,我会在应用程序中选择它。所以程序是我在一张纸上得到订单,然后我将它插入到应用程序中,这样我们就可以更容易地跟踪订单上的每个项目需要做什么。所以,我还需要一个项目的状态…如果它完成或没有。如果所有项目都已完成粘贴等,那么我可以将我的订单标记为已完成。你能再解释一下“颜色的按位值”的含义吗。