SQL:具有多个类别的产品

时间:2013-11-28 06:25:05

标签: mysql database-design

每个产品存储多个类别(至少3个)的最佳数据库设计和性能是什么?产品表可能有数百万件物品。

要有两个表产品 products_relationship (存储product_id和category_id的位置)?

那么选择同时分配了1类和2类的产品呢?

  1. SELECT IN()将选择1或2
  2. 2 INNER JOIN每个products_relationship听起来并不大。

2 个答案:

答案 0 :(得分:1)

你的设计很好看。当你有 m到n关系时,你应该总是使用这样的映射表。

您可以选择包含这两个类别的产品

select p.id, p.name
from products p
inner join product_relationship pr on p.id = pr.product_id
inner join categories c on c.id = pr.category_id
where c.name in ('cat1','cat2')
group by p.id, p.name
having count(distinct c.id) = 2

您可以将映射表命名为不同:product_categories以指示您构建的关系。

答案 1 :(得分:0)

您可以创建多对多的关系。 Google HABTM 了解更多

<强>产品

id name

<强>类别

id name

<强> PRODUCT_CATEGORY

product_id category_id