SQL 加入 vs Code 聚合

SQL Join vs Code aggregation

我正在尝试开发从我的关系数据库 (mysql) 中检索聚合信息的最佳方法。我有两个表:供应商和型号。两者是一对多的关系,即一个厂商可以有多个型号,一个型号只能关联一个厂商。

从两个表中检索信息以便每个供应商都有其关联模型的最佳方法是什么?我的想法是制作一个 REST API 以便它可以具有以下输出:

{
    name: "one",
    description: "one description",
    models: [
        {
            name: "one_model_1",
            price: 100
        },
        {
            name: "one_model_2",
            price: 200
        }
    ]
    ...
  1. 通过在两个表之间建立连接来检索。这样,将获得以下输出:

    select v.name as vendorName, v.description as vendorDescription, m.name 
    as modelName, m.price as modelPrice from vendor v inner join model m on 
    v.id = m.vendor_id;
    

    问题是需要执行代码处理以将每个供应商元素与模型列表相关联。在这种情况下,来自数据库的信息会带来来自供应商的重复信息。

  2. 首先对所有厂商进行搜索,然后循环检索关联的模型。这里会出现 N + 1 问题,因为需要一个查询来获取 N 个供应商,然后需要 N 个查询来检索模型。

  3. 首先搜索供应商。然后,从供应商的id中,将检索所有模型,并通过代码建立供应商-模型关联。

我想知道什么是最好的解决方案。

选项 1 是您列出的选项中最有效的选项。需要最少的数据库调用次数(应用程序和数据库之间的往返次数最少)。

SELECT v.Name, v.Description,
       GROUP_CONCAT(CONCAT(m.Name, ':', m.Price))
    FROM Vendors AS v
    JOIN Models AS m ON v.id = m.vendor_id
    GROUP BY v.Name, v.Description

一次调用,文本操作在返回结果集之前完成。