MySQL集存储

Rob*_*rto 1 mysql recursion normalization set

我在用PHP编写的Web应用程序中有几个表,我想知道这是不是很好的实践.

CREATE TABLE `products`(
  `product_id` int NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `variations` varchar(255) default NULL,
  PRIMARY KEY  (`product_id`)
)

CREATE TABLE `variations`(
  `variation_id` int NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `kind` varchar(255) default NULL,
  PRIMARY KEY  (`variation_id`)
)
Run Code Online (Sandbox Code Playgroud)

例如,产品将是:

1,'Cup','1,2,3'
Run Code Online (Sandbox Code Playgroud)

虽然变化将是:

1,'Green','Color'
2,'Glass','Texture'
3,'Blue','Color'
Run Code Online (Sandbox Code Playgroud)

这样许多产品可以具有相同的颜色/纹理.我发现的问题是我无法将其放入将返回数据的单个查询中:

1,'Cup','1,Green,Color-2,Glass,Texture-3,Blue,Color'
Run Code Online (Sandbox Code Playgroud)

然后相应地解析它以显示每个变体的图像.

存储函数是否返回该格式是最好的主意?或者我应该进一步规范化,如果是这样,怎么样?

Seb*_*Seb 5

我认为最明智的是添加另一个表:

CREATE TABLE `products_variations`(
  `product_id` int NOT NULL,
  `variation_id` int NOT NULL,
  PRIMARY KEY  (`product_id`, `variation_id`)
);
Run Code Online (Sandbox Code Playgroud)

从那里,加入三个表的简单查询将为您提供所需的结果.