我正在为网上商店创建数据库设计。我想存储具有不同属性的产品。目前我有一个包含+100列的表,但我想优化它。
这是我到目前为止所提出的。到目前为止,我对我的设计有一些疑问(见下文)。
免责声明: 这是一个数据库设计。我没有一些php / sql代码,因为我不知道这是否是正确的方法。我会尽量使这个问题得到证实。
我们走了......
我有3张桌子:
表:产品
Product_id | Name | SKU
------------------------------------------------------
1 | iPhone 7 | iphone7
2 | HTC One | htcone
3 | Galaxy S8 | galaxys8
如您所见,我的数据库中有3个产品
表:属性
Attribute_id | Name
---------------------------------------
1 | Color
2 | Weight
3 | Height
如您所见,我的数据库中有3个不同的属性 - 请注意,某些产品不具备每个属性
表:attributes_values
Attribute_value_id | Attribute_id | Product_id | Value
-----------------------------------------------------------------------
1 | 1 | 1 | Black
2 | 2 | 1 | 0,125 kg
3 | 3 | 1 | 10 cm
4 | 1 | 2 | Gold
5 | 1 | 2 | 0,15 kg
如您所见,产品1(iphone)有3个属性,产品2(htc one)有2个属性,而product 3(galaxy s8)属性为零。
我的问题
首先,这是一个好方法吗?我想在PHP中创建一个“仪表板”,我可以在向数据库添加新类型的产品时动态添加新属性。这就是为什么我在2个不同的表中分离属性名称和值。
其次,如何从数据库中获取信息。我想选择产品+它拥有的所有属性(以及与每个属性相关的值)。我认为这是做到这一点的方法。如果我错了,请纠正我。
SELECT
p.name, // the product name
p.sku, // the product SKU
v.value, // the attribute value
a.name // the attribute name
FROM
products AS p
LEFT JOIN
attributes_values AS v
ON
p.product_id = v.product_id
LEFT JOIN
attributes AS a
ON
v.attribute_id = a.attribute_id
我希望我的问题尽可能清楚。如果没有,请随时问。英语不是我的母语,所以请原谅我的一些语法错误。谢谢大家!
我找到了以下链接,也许他们可以提供帮助。