我正在考虑如何在电子商务解决方案中构建我的MySQL数据库。更具体地说,我正在研究产品结构。
这些是我到目前为止提出的表格。你觉得怎么样?
结构说明
该应用程序是多语言的。因此,产品表分为2个表。
如果产品有例如2个变体(小,中)总共将插入3行。这是因为每个变体可以为每个变体提供不同的信息。当产品显示在网页上时,产品1将显示一个带有Small&的下拉框。介质。没有变体的产品自然只会插入1行。
products
id master product_number
1 0 123
2 1 456
3 1 678
products_descriptions
id product_id country_code image name description vat price
1 1 en-us image.jpg t-shirt Nice t-shirt 25 19.99
2 2 en-us image.jpg t-shirt Nice t-shirt 25 19.99
3 3 en-us image.jpg t-shirt Nice t-shirt 25 19.99
products_to_options
product_id option_id
2 1
3 2
options
id name
1 Small
2 Medium
答案 0 :(得分:1)
您的产品表是精神分裂症,其实体有时是产品,有时是变体。这导致非常麻烦的行为。例如,你想问“我们有多少种不同的产品?”由select count(*) from products
回答,但这里给出了错误的答案,要获得正确答案,您必须知道Magic Number 0和查询select count (*) from products where master=0
。 “列出所有产品以及我们为每个产品提供的变体数量”是另一个应该直截了当的查询,但现在却不是。还有其他异常现象,例如products_descriptions中的第一行是具有价格和图片但没有尺寸的衬衫(尺寸存储在变体中,但它们有自己的价格和图片)。
您的问题听起来像是在两种情况下都有产品:(1)可以在商店中显示为商品的商品,(2)可以由客户订购的商品。 (1)可能有一个像“万圣节T恤”这样的名字,它可能有一个顾客看到的图像。 (2)是客户订购的,因此它有(1),但也有变量规格,如“小”或可能是“红色”。它可能也有价格和order_id,因此您的商店可以知道要运送的具体商品。
您应该为每个上下文提供一个实体。这是我怎么做的
displayable_product
id name
1 "Baseball Cap"
2 "T-Shirt"
orderable_product
id d_product_id order_id size color price
1 1 123 red 9.99
2 2 456 small 19.99
3 2 789 medium 21.99
displayable_content
id d_product_id locale name image
1 1 en_US "Baseball Cap" baseballcap.jpg
2 1 es_US "Gorra de Beisbol" baseballcap.jpg
3 2 en_US "Nice T-Shirt" nicetshirt.jpg
4 2 es_US "Camiseta" nicetshirt.jpg
您应该在显示表中使用locale
代替country
来说明拥有多种语言的国家/地区(美国,瑞士和其他国家/地区),并且您可以将{{1}分开}和size
进入自己的color
表。如果您需要有关orderables的国家相关数据(如运送到不同国家/地区的不同价格/货币),您还必须提取依赖于国家/地区的orderable_content表。