我的架构看起来像这样:
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.所以实际上有两个问题:
答案 0 :(得分:0)
您的架构适用于多对多关系。
您需要添加的只是主键和外键约束。
要查询所需的数据,只需在其自然连接条件下连接这三个表。
要获取汇总列表,请使用string_agg
之类的聚合函数和items.title
分组。