如何用标签有效查询项目



我的模式看起来像这样:

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

我想有效地获取一个项目列表,每个项目都有自己的标签集。大概在数据库中使用一个查询有效我的意思是,使用最少的服务器和数据库资源,例如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. 也许可以重新设计数据模式以使这种情况更有效?也许我应该使用数组,hstore,jsonb?

您的架构对多对多关系有益。

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

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

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

最新更新