gpt4 book ai didi

mysql - 将我的数据结构存储在数据库中的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:10 25 4
gpt4 key购买 nike

我正在建立一个网上商店,但遇到了问题。我将拥有直接价格的产品(例如 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 (red, S, M, green, XL, etc...)} )。在此之后,我将有另一个表 [combinations][combinations][ 之间存在多对多 [n-to-m] 关系varietyValues] 这将生成一个新表 [combPrices]。这个新的 n 到 m 表的每一行都有一个价格。

现在的问题是我不知道如何在这个数据结构中存储单一价格的产品。


更新 2

在这张图片中,您可以看到数据库图表,我认为这对于多价产品来说是可以的: database diagram

主要问题:由于这是一个网上商店,人们会将商品放入购物车。我认为插入购物车的商品应该来自同一个表(在我们的例子中是 [combinations] 表,因为存储了价格)。

以下是这些表的一些数据,只是为了更清楚:

[产品]

productid   |   productName
1 | Nike T-Shirt
2 | HTC Touch 2 Smartphone

[规范]

specId   |   productId   |   specName
1 | 1 | Size
2 | 1 | Color

[规范值]

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

[组合](商品放入购物车)

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

[组合部件]

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com