繁体   English   中英

如何正确构建数据库

[英]How to properly build database

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

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

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

3如果客户想要在所选项目上打印自定义标签或其徽标,该怎么办? 如果我在我的应用程序中选择打印项目或贴纸,那么应该在数据库中存储哪些内容? 还在OrderProduct上?

  1. 添加一个名为Colors的表,并使其具有字段ID,可行名称等。在Product中显示它支持的Colors的按位值。

  2. 是的,您将拥有OrderProduct表中的数量。

  3. 这取决于他得到的贴纸类型。 贴纸是他可以选择的贴纸还是他可以上传的东西?

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

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


回应评论

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

1 | Black
2 | Gray
3 | Red

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

因此,为了获得Black&Grey的按位值,您可以对ID进行平方并将其添加到一起(bor)。 一旦你有了这个值(这是按位值)你可以在它上面运行band以查看它是否具有该颜色。

对于PHP来说, 是一个非常好的bitwise教程,我建议您阅读它以获取有关该主题的更多信息。

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

数据库解决方案可以变化; 看到对SO答案我的建议,如果你事先不知道的变量类型是什么,或者这个如果你这样做。

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

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

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

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

    OrderID ProductID Customization 1 2蓝色贴纸1 1绿色贴纸

据推测,并非订单上的所有商品都可以进行自定义; 如果一个数量> 1的order_product行可以为每个项目进行不同的自定义,那么您必须将其拆分得更远......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM