使用具有相同名称的多个表或具有大号的单个表。的条目

时间:2016-06-04 13:58:58

标签: mysql

我正在制作一个需要根据位置整理产品的应用程序。提供主要产品表,可用于从每个位置引用。每个位置可以对主产品表具有不同的参考集。

例如:area_1可以有product_1但不能有product_5。

我正在考虑两种方法:

  1. 拥有table table_area(areaId),table_product(productId)和table_area_product(areaId,productId),并根据提供的areaId对产品进行排序。
  2. 拥有多个表格,例如table_area_product_ {areaId},例如:area_1(table_area_product_1)。
  3. How to write a mysql function with dynamic table name? ,此链接有助于动态表名的使用,但也表示不使用它,但我无法找到任何进一步的解释。

    产品数据可以是10万个条目,区域数据最多可以是300个条目。两者都很可能会随着时间的推移而增加。

    最好的方法是什么?还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

出于多种原因,你的想法都很糟糕。

您应该有一个产品表,其中根本没有区域信息。

然后,您创建一个包含areaproduct_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()