我正在建一个网上商店,我有一个问题。
我会有直接定价的产品(例如HTC Touch 2智能手机:$299.00),但同时我也会有基于品种组合定价的产品:
例如:

product: Nike Exclusive T-Shirt 2011
varieties:
   Sizes: L, XL
   Colors: red, blue
combinations will be:
L white - $10
XL white - $15
L blue - $11
XL blue - $16

我需要数据库结构的最佳方式(或唯一一种工作方式:),在这里我可以存储这两种类型的产品,如果我想在网页上列出包含这两种类型产品的类别(单价格、多价格),我可以构建一个mysql查询来获取同一查询中的所有产品。
谢谢
更新
我肯定有以下表格:[products][varieties](颜色,大小),[varietyValues](存储什么主od颜色和产品有什么类型的大小-每个都是表格中的一行{productid+varietyid+value(红色、S、M、绿色、XL等)})。在此之后,我将有另一个表[combinations],在[combinations][varietyValues]之间有多对多[n-to-m]关系,这将产生一个新的表[combPrices]。这个新的n-to-m表的每一行都有一个价格。
现在的问题是我不知道如何在这个数据结构中存储单一价格的产品。
更新2
在这幅图中,您可以看到数据库关系图,我认为这对于多价格产品来说是可以的:
主要问题是:
因为这是一个网络商店,人们会把商品放在购物车里。我认为插入购物车中的商品应该来自同一个表(在我们的例子中是[combinations]表,因为存储了价格)。
下面是这些表格的一些数据,只是为了更清楚:
[products]
productid   |   productName
1           |   Nike T-Shirt
2           |   HTC Touch 2 Smartphone

[specifications]
specId   |   productId   |   specName
1        |   1           |   Size
2        |   1           |   Color

[specvalues]
specValueId   |   specId   |   svValue
1             |   1        |   L
2             |   1        |   XL
3             |   2        |   white
4             |   2        |   blue
5             |   2        |   red

[combinations](购物车中的商品)
combinationId   |   price   |   description
1               |   10      |   White L Nike T-Shirt
2               |   15      |   White XL Nike T-Shirt
3               |   11      |   Blue L Nike T-Shirt
4               |   16      |   Blue XL Nike T-Shirt
5               |   18      |   Red XL Nike T-Shirt

[combinationParts]
nmid   |   combinationId   |   specValueId
1      |   1               |   1
2      |   1               |   3
3      |   2               |   2
4      |   2               |   3
5      |   3               |   1
1      |   3               |   4
2      |   4               |   2
3      |   4               |   4
4      |   5               |   2
5      |   5               |   5

我希望我的图表和数据库填充是有意义的:)。
所以,最后一个问题是,我如何存储单一价格的产品(HTC Touch 2智能手机),以便它可以像多价格的产品一样添加到购物车中。

最佳答案

您可以很容易地将价格存储在产品旁边,并使用这样的查询来获取产品。

SELECT p.productid,
       p.productname,
       CASE
         WHEN cb.combinationid > 0 THEN cb.price
         ELSE p.price
       END,
       cb.combinationid
FROM   products p
       LEFT JOIN specifications sp
         ON sp.productid = p.productid
       LEFT JOIN specvalues spv
         ON spv.specid = sp.specid
       LEFT JOIN combinationparts cbp
         ON cbp.specvalueid = spv.specvalueid
       LEFT JOIN combinations cb
         ON cb.combinationid = cbp.combinationid
WHERE  p.productid IN ( 1, 2 )
       AND CASE
             WHEN cb.combinationid > 0 THEN cb.combinationid IN ( -100, 1, 2 )
             ELSE 1 = 1
           END

这需要输入产品编号和组合。由于这些组合可能会丢失,所以我添加了-100作为默认值

关于mysql - 将数据结构存储在数据库中的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5248461/

10-13 08:49
查看更多