我在用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`)
)例如,产品将是:
1,'Cup','1,2,3'而另一种变体是:
1,'Green','Color'
2,'Glass','Texture'
3,'Blue','Color'使得许多产品可以具有相同的颜色/纹理。我发现的问题是,我不能将其放入单个查询中,该查询将返回以下数据:
1,'Cup','1,Green,Color-2,Glass,Texture-3,Blue,Color'然后相应地对其进行解析以显示每个变体的图像。
返回这种格式的存储函数是最好的想法吗?或者我应该进一步规范化,如果是这样的话,如何规范化?
发布于 2009-04-07 20:49:27
我认为明智的做法是添加另一个表:
CREATE TABLE `products_variations`(
`product_id` int NOT NULL,
`variation_id` int NOT NULL,
PRIMARY KEY (`product_id`, `variation_id`)
);在此基础上,连接三个表的简单查询将为您提供所需的结果。
发布于 2009-04-07 20:51:04
SELECT GROUP_CONCAT(variation_id, ', ', name, ', ', kind SEPARATOR '-')
FROM products
INNER JOIN
variations
ON FIND_IN_SET(variation_id, variations)
GROUP BY
product_id由于这是一个多对多的关系,所以最好有第三个表:
CREATE TABLE product_variations
(
product_id INT NOT NULL,
variation_id INT NOT NULL,
PRIMARY KEY (product_id, variation_id)
);https://stackoverflow.com/questions/727520
复制相似问题