我的模式看起来像这样:
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.因此,实际上有两个问题:
- 有效 SQL查询以从这样的模式中检索此类数据看起来像?
- 也许可以重新设计数据模式以使这种情况更有效?也许我应该使用数组,hstore,jsonb?
您的架构对多对多关系有益。
您需要添加的只是主要和外键约束。
要查询所需的数据,只需在其自然连接条件下加入三个表即可。
要获取一个汇总列表,请使用string_agg
之类的汇总函数和items.title
的组。