如何使用标签高效查询项目

时间:2018-02-11 00:54:04

标签: sql postgresql postgresql-10

我的架构看起来像这样:

items ( id, title)
tags (id, name )
items_tags ( item_id, tag_id )

我希望有效获取一个项目列表,每个项目都有自己的标记集。大概是对数据库进行一次查询。通过高效我的意思是查询应该使用最少量的服务器和数据库资源(如CPU和CPU)以最快的时间返回其结果。内存。据推测,项目和标签的数量超过数百万,并行查询的数量很多。高负荷和所有的东西。如下所示:

// Get all items with tags
'Item-1' has 'Tag-1', 'Tag-2'
'Item-2' has 'Tag-3', 'Tag-5'
...

我正在使用PostgreSQL 10.所以实际上有两个问题:

  1. 高效 SQL查询如何从这样的模式中检索此类数据?
  2. 也许数据架构可以重新设计,以便在这种情况下更有效率?也许我应该使用Arrays,HStore,JSONB?

1 个答案:

答案 0 :(得分:0)

您的架构适用于多对多关系。

您需要添加的只是主键和外键约束。

要查询所需的数据,只需在其自然连接条件下连接这三个表。

要获取汇总列表,请使用string_agg之类的聚合函数和items.title分组。