gpt4 book ai didi

mysql - 基于数量和属性的多价格高效数据库设计

转载 作者:行者123 更新时间:2023-11-29 07:37:08 26 4
gpt4 key购买 nike

我有一个根据数量和属性具有不同价格的产品的数据样本。价格可能会偶尔更新(不会太频繁)。

PID | Name                | Type  | Colour  | Colour Print | Quantity: 1 to 149 |   150 to 199| 200 to 249 |250 to 499
1 |White ABC Product |ABC |White |1CP |2.34|2.07 |1.82|1.51
2 |White ABC Product |ABC |White |2CP |2.6 |2.31 |1.97|1.62
3 |White ABC Product |ABC |White |3CP |2.86|2.55|2.14|1.77
7 |Red ABC Product |ABC |Red |1CP |2.39|2.12|1.87|1.56
8 |Red ABC Product |ABC |Red |2CP |2.65|2.36|2.02|1.67
9 |Red ABC Product |ABC |Red |3CP |2.91|2.6|2.19|1.82
12 |White XYZ Product |XYZ |White |1CP |2.69|2.38|2.09|1.74
13 |White XYZ Product |XYZ |White |2CP |2.69|2.38|2.09|1.74
14 |White XYZ Product |XYZ |White |3CP |3.29|2.93|2.46|2.04
18 |Emerald XYZ Product |XYZ |Emerald |1CP |2.74|2.43|2.14 |1.79
19 |Emerald XYZ Product |XYZ |Emerald |2CP |3.04|2.71|2.32 |1.91
20 |Emerald XYZ Product |XYZ |Emerald |3CP |3.34|2.98|2.51 |2.09

所以基本上,我可以将数据库设计为与上述数据示例相同的结构,并将所有数据转储到表中(大量重复),或者我可以这样做:

Product Table:
---------
--Product id
--Product name {ABC, XYZ, PQR...so on}


Colour Table:
-------
--Colour id
--Colour value {white, red, emerald, and so on}

Colour Print Table
--------
--Colour print id
--Colour print value {1CP, 2CP, 3CP}

Quantity Table
--------
--Quantity id
--Quantity value {1-149, 150-199, 200-249,250-499}

Price Table
-------
--Price id
--Product id
--Colour id
--Colour Print id
--Quantity id
--Price

所以价格表看起来像这样:

Price table                 
price id | product id |colour id | quantity id | colourprint id | price
1 | 1 |1 | 1 |1 |2.34
2 | 1 |1 | 2 |1 |2.07
3 | 1 |1 | 3 |1 |1.82
4 | 1 |1 | 4 |1 |1.51
5 | 1 |1 | 1 |2 |2.6
6 | 1 |1 | 2 |2 |2.31
7 | 1 |1 | 3 |2 |1.97
8 | 1 |1 | 4 |2 |1.62
9 | 1 |1 | 1 |3 |2.86

当用户根据产品类型、颜色、彩印和数量选择选项时,会向用户显示价格。

future 可能还会添加新产品。我希望以最有效的方式设计数据库。

我发现第一个选项更容易实现,但不确定它是否最有效或者是否正确。

您的意见将不胜感激。谢谢!

最佳答案

你现在有多少行?如果少于 1000 万,为什么还要费心去改变?您需要将所有“祖母绿”更改为“绿色”吗?存在“过度规范化”这样的事情。

如果您担心空间问题,可以通过使用 ENUM 来避免这些“规范化”表中的每一个,例如

quantity ENUM('1-149', '150-199', '200-249', '250-499')

这将占用 1 个字节。但是,我不会将 ENUM 用于某些可能经常更改的列表,或者具有超过 20 个值的列表。 (实际限制要高得多。)

如果您确实要进行规范化,请使用 TINYINT UNSIGNED(1 字节,0..255)或 SMALLINT UNSIGNED(2 字节,0..65K)。

如果您进行规范化并希望找到所有“emerald & XYZ”项,查询将变得困惑且缓慢。

请提供可能的SELECTs(根据方便的情况),以便我们进一步评价。

关于mysql - 基于数量和属性的多价格高效数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253787/

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