用于容纳具有可变多个选项的产品的数据库结

时间:2014-09-11 16:32:55

标签: php mysql sql database database-design

我正在寻找一些关于mySQL数据库的想法,以存储具有多个(和可变)选项和每个产品价格的产品。例如。某些产品可能需要多个列来存储每个产品选项的详细信息:

Product 1:
SKU
Name
General product description
--------------------------
options for product 1:
Height   Width   Depth   Weight   Material   Other_1   Other_2  Etc...   Price


Product 2:
SKU
Name
General product description
--------------------------
options for product 2:
Flow-rate   Material   Weight   Other_1   Other_2  Etc...   Price

我有点难过,因为每个产品的列数和列名数可能不同,每个产品可能包含很多选项/价格。

到目前为止,我正在使用'产品'表和'价格'表:

CREATE TABLE IF NOT EXISTS `products` (
product_id int(11)  NOT NULL AUTO_INCREMENT
,product_type text
,product_page_1 text
,product_page_2 text
,product_page_3 text
,product_page_4 text
,product_sku text
,product_name text
,product_head text
,product_desc text
,product_image text
,product_sequence text
,product_flags text
,product_status text
,PRIMARY KEY (product_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=102;


CREATE TABLE IF NOT EXISTS `prices` (
price_id int(11) NOT NULL AUTO_INCREMENT
,price_type text
,price_assoc text
,price_desc text
,price_option text
,price text
,price_sequence text
,price_flags text
,price_status text
,PRIMARY KEY (price_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=109;

每种产品可以有任意数量的“价格”。 “价格”通过“price_assoc”字段与产品ID相关联。

所以我可以为每种产品提供无数的价格条目,但是最新的方法是每个价格添加多个价格选项,因为每个产品的相关价格可能有不同的选项?

2 个答案:

答案 0 :(得分:1)

您正在寻找的是EAV表。实体 - 属性 - 值。 那就是你有记录表的那种结构,然后是一个子记录表。

记录表:

ID 名称 活性

子记录表:

ID RECORD_ID 键 值

然后你可以在一个连接查询中获取记录,以及所有子记录。所以子记录与记录有一对多的关系。

github中有一个php示例:here

答案 1 :(得分:1)

即使它是相同的产品,我也可能会使用同一列的价格。因此,不必为每行的价格和描述指定4列。为什么不创建一个只在行上显示价格的表格,一行用于描述/选项/文本等,然后可以创建一个'price-ID'字段来跟踪不同的价格水平。

假设您有一种产品,产品A,有4种不同的价格,那么您的价格表将如下所示:

product_id      product_name     price      description     option     text       price_ID
1               Product A        100        'Bla bla'         A          bla        1
1               Product A        250        'Bla bla'         B          bla        2
1               Product A        400        'Bla bla'         C          bla        3
1               Product A        500        'Bla bla'         D          bla        4

通过这种方式,您可以根据需要为每种产品提供尽可能多的价格,并且可以降低数据库的复杂性