如何正确构建数据库

时间:2013-04-09 22:05:08

标签: database database-design entity-relationship

我遇到了一个问题,我想问你一些方向。我有数据库,如下图所示。 enter image description here

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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


    对评论的回应

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

    1 | Black
    2 | Gray
    3 | Red
    

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

    所以要获得Black&的按位值灰色你将ID加在一起并将它们加在一起(bor)。一旦你有了这个值(这是一个按位值)你可以在它上面运行band以查看它是否有那种颜色。

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

答案 1 :(得分:0)

  1. 您描述的问题 - “产品”有多种颜色可供选择 - 很常见;标准解决方案是引入“产品变体”的概念。例如,T恤有多种颜色和多种尺寸可供选择;鞋子有多种尺寸等。
  2. 数据库解决方案可能有所不同;如果您事先不知道变体类型是什么,请参阅this在SO上的答案以获取我的推荐,如果您这样做,请this

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

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

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

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

      OrderID ProductID自定义           1 2蓝色贴纸           1 1绿色贴纸

    3. 据推测,并非订单上的所有商品都可以进行自定义;如果单个order_product行的数量> gt; 1可以为每个项目进行不同的自定义,你必须进一步拆分......