MySQL产品属性表设计

Her*_*err 3 mysql database-design

对于当前的客户项目,我开发了一个存储产品的CMS .

产品是具有标题,文本等某些特性的条目.
但是,有些客户希望拥有不同的属性,如价格,颜色等.

我尝试使我的代码尽可能通用,所以我不想修改
每个客户的代码.

我的问题:
我如何设计这样一个数据库,产品可以拥有无​​限的多个属性?
如何为这种不同的设计创建/生成表单?

谢谢阅读.

Sae*_*eed 8

您可以拥有一个属性表和一个拥有属性的表,因此您的表模式将如下所示:

产品(标识,标题,文字......)

属性(id,name)

Product_Properties(ProductId,PropertyId,value)

因此,您可以在属性表上定义所需属性的列表,并通过在Product_Properties中插入元组将它们分配给产品.考虑您有2个产品(A和B),在您的情况下,具有以下属性:高度,颜色,价格如下:

A: 180, Red, 200$
B: 170, Blue, 270$
Run Code Online (Sandbox Code Playgroud)

你的表将有这些元组:

产品(标识,标题,文字):

(1,"A","desc1")
(2,"B","desc2")
Run Code Online (Sandbox Code Playgroud)


属性(id,name)

(1,"height")
(2,"color")
(3,"price")
Run Code Online (Sandbox Code Playgroud)


Product_Properties(ProductId,PropertyId,value)

(1,1,"180")
(2,1,"179")
(1,2,"Red")
(2,1,"Blue")
(1,3,"200")
(2,3,"270")
Run Code Online (Sandbox Code Playgroud)



这是一个查询产品,其中'price'等于'200':

SELECT P.title
FROM Product P,Properties Pr,Product_Properties PP
WHERE  P.id=PP.ProductId AND PP.PropertyId=Pr.id AND Pr.name='height' AND PP.value='200'
Run Code Online (Sandbox Code Playgroud)