Mysql 基于数量和属性的多价格数据库设计
我有一个根据数量和属性不同价格的产品的数据样本。价格可能会偶尔更新(不太频繁) 因此,基本上,我可以将数据库设计为与上述数据样本相同的结构,并将所有数据转储到表中(大量重复),或者我可以这样做:Mysql 基于数量和属性的多价格数据库设计,mysql,database-design,Mysql,Database Design,我有一个根据数量和属性不同价格的产品的数据样本。价格可能会偶尔更新(不太频繁) 因此,基本上,我可以将数据库设计为与上述数据样本相同的结构,并将所有数据转储到表中(大量重复),或者我可以这样做: Product Table: --------- --Product id --Product name {ABC, XYZ, PQR...so on} Colour Table: ------- --Colour id --Colour value {white, red, emerald, an
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
因此,价格表将如下所示:
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
当用户根据产品类型、颜色、彩色打印和数量选择选项时,将向用户显示价格
未来可能还会添加新产品。我希望以最有效的方式设计数据库
我发现第一个选项更容易实现,但不确定它是最有效的还是正确的
如果您能提供意见,我们将不胜感激。谢谢大家! 您现在有多少行?如果少于1000万,为什么还要费心去改变呢?你是否需要把所有的“翡翠”都改成“绿色”?有一种说法是“过度正常化” 如果您关心空间,可以使用
ENUM
避免这些“规范化”表中的每一个,例如
quantity ENUM('1-149', '150-199', '200-249', '250-499')
这需要1个字节。但是,对于一些可能经常更改的列表,或者具有超过20个值的列表,我不会使用ENUM。(实际限制要高得多。)
如果使用规范化,请使用TINYINT UNSIGNED
(1字节,0..255)或SMALLINT UNSIGNED
(2字节,0..65K)
如果您确实进行了规范化,并且希望查找所有“emerald&XYZ”项,那么查询将变得混乱而缓慢
请提供可能的
选择
(基于任何方便的选项),以便我们可以对其进行进一步的评论。在超高级别上,所有内容看起来都是1-many?第二个选项看起来更接近我,但架构似乎可以从进一步的规范化中受益