Mysql SQL:具有多个类别的产品

Mysql SQL:具有多个类别的产品,mysql,database-design,Mysql,Database Design,哪种数据库设计和性能最好,可以存储每个产品的多个类别(至少3个)?Products表可能有数百万个项目 要有两个表产品和产品关系(在哪里存储产品id和类别id) 那么,如何选择同时指定了类别1和类别2的产品呢 SELECT IN()将选择1或2 每个产品的2个内部连接关系听起来不太好 您可以创建多对多关系。谷歌HABTM了解更多信息 产品 id name 类别 id name product_id category_id 产品类别 id name product_id category_

哪种数据库设计和性能最好,可以存储每个产品的多个类别(至少3个)?Products表可能有数百万个项目

要有两个表产品产品关系(在哪里存储产品id和类别id)

那么,如何选择同时指定了类别1和类别2的产品呢

  • SELECT IN()将选择1或2
  • 每个产品的2个内部连接关系听起来不太好

  • 您可以创建多对多关系。谷歌HABTM了解更多信息

    产品

    id name
    
    类别

    id name
    
    product_id category_id
    
    产品类别

    id name
    
    product_id category_id
    

    你的设计看起来不错。当您有一个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\u categories
    ,以指示您建立的关系