我正在制作一个需要根据位置对产品进行排序的应用程序。提供了主要产品表,可用于在每个位置进行引用。每个位置可以有一组不同的主产品表引用。
例如:area_1 可以有product_1,但不能有product_5。
我正在考虑两种方法:
- 拥有表 table_area(areaId)、table_product(productId) 和 table_area_product(areaId, ProductId),并根据提供的 areaId 对产品进行排序。
- 拥有多个表,例如 table_area_product_{areaId},例如:area_1(table_area_product_1)。
How to write a mysql function with dynamic table name? ,此链接有助于使用动态表名称,但也说不要使用它,但我找不到任何进一步的解释。
产品数据最多可达 100 000 个条目,区域数据最多可达 300 个条目。随着时间的推移,两者很可能都会增加。
最好的方法是什么?还有其他选择吗?
最佳答案
出于多种原因,你的两个想法都很糟糕。
您应该有一个产品表,其中根本没有区域信息。
然后,您创建一个包含 area
和 product_id
的简单交叉引用表
假设您有北/南/东/西区域
表名称=area_product
area | product_id
North | 1
North | 2
North | 5
South | 1
South | 2
South | 6
等等。然后您只需学习如何在查询语法中使用 JOIN 即可。
SELECT p.*
FROM product p
JOIN area_product ap ON p.id = ap.product_id
WHERE ap.area = 'North'
此结构的另一个好处是您可以向此交叉引用表添加有用的信息仅作为示例假设您希望仅在某个区域的特定日期之后提供产品。
area | product_id | start_selling
North | 1 | 2016-01-01
North | 2 | 2016-01-01
North | 5 | 2016-07-01
South | 1 | 2016-01-01
South | 2 | 2016-07-01
South | 6 | 2016-01-01
现在要查找北部地区的所有可用产品,您只需在条件中添加日期即可
SELECT p.*
FROM product p
JOIN area_product ap ON p.id = ap.product_id
WHERE ap.area = 'North'
AND ap.start_selling < NOW()
关于mysql - 使用具有相同名称的多个表或具有较大编号的单个表。条目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631089/