使用 mysql 编辑产品销售地点

Edit product selling location using mysql

我正在构建一个电子商务平台 (PHP + MySQL),我想为产品添加一个属性(特征),指定的能力 (enable/disable ) 特定城市的销售状态。

这里是简化的tables:

城市

id  name  
==========
1  Roma
2  Berlin 
3  Paris
4  London

产品

id  name   cities
==================
1  TV      1,2,4
2  Phone   1,3,4
3  Book    1,2,3,4
4  Guitar  3

在这个简单的示例中很容易查询(使用 FIND_IN_SET 或 LIKE)以检查特定城市的产品可用性。 这对于本示例中的 4 个城市甚至 100 个城市都可以,但对于大量城市和大量产品是否实用?

为了更好的"performance"或更好的数据库设计我应该添加另一个table到table以在查询中加入(productid, cityid, status) ?

可用性

id  productid  cityid  status
=============================
1  1           1       1
2  1           2       1
3  1           4       1
4  2           1       1
5  2           3       1
6  2           4       1
7  3           1       1
8  3           2       1
9  3           3       1
10 3           4       1
11 4           3       1

For better "performance" or better database design should I add another table

是的,您绝对应该创建另一个 table 来保存您发布的信息,而不是存储在 , 分隔列表中,这违反了 Normalization 概念。此外,当您尝试 JOIN 并找出在哪些城市可用的产品的详细信息时,您无法获得更好的性能。

在任何时间点,如果您想取回逗号分隔的值列表,例如 1,2,4 的值,那么您可以执行 GROUP BY productid 并使用 GROUP_CONCAT(cityid) 来获得相同的值。