【问题标题】:How to create product table in which each product is under multiple categories in MySQL?如何在MySQL中创建每个产品属于多个类别的产品表?
【发布时间】:2011-12-17 03:57:30
【问题描述】:

我有 2 个 MySQL 表:

categories (id int, name varchar(1000))

还有

products (id int, name varchar(1000))

每个产品都可以属于多个类别。我正在考虑将“category_ids”列添加到“products”表中,类别ID用分号分隔,但是这种方法对于MySQL查询不方便。

还有其他可能的方法吗?

【问题讨论】:

    标签: php mysql database database-design optimization


    【解决方案1】:

    制作第三张表,如下图所示参考这两个表

    【讨论】:

    • 哦,太好了,我怎么会忘记这种在2个表之间映射的方法,谢谢提醒我
    【解决方案2】:

    这似乎是多对多的关系......

    为了映射多对多关系,你需要另一个表

    categories_products(id, category_id, product_id) 
    

    所以一个产品可以归入多个类别,同样一个类别可以包含多个产品。

    Product 表将与 categories_products 表具有一对多的关系 Categories 表也将与 categories_products 表有一对多的关系

    这是实现多对多关系的标准方法

    【讨论】:

    • 一个聚集的复合主键(category_id,product_id)会更好地保证完整性并且性能更高——抛弃无意义的代理 PK 并阅读索引类型stackoverflow.com/questions/4419499/…
    【解决方案3】:

    添加连接两者的联结表:

    **product_categories**
    productid (FK ref product.id)
    categoryid (FK ref categories)
    

    【讨论】:

      【解决方案4】:

      创建一个将产品与类别匹配的表:

      product_id category_id
      1          1
      1          2
      2          5
      3          5
      3          2
      

      等等。希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-04-20
        • 1970-01-01
        相关资源
        最近更新 更多