2

我的架构看起来像这样:

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

我想有效地获取项目列表,每个项目都有自己的一组标签。大概是对数据库的一次查询高效是指查询应该在尽可能快的时间内返回其结果,使用最少的服务器和数据库资源,如 CPU 和 RAM。据推测,项目和标签的数量超过几百万,并行查询的数量很高。高负荷和所有的东西。所以像:

// 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?
4

1 回答 1

1

您的模式适用于多对多关系。

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

要查询您需要的数据,只需按照自然连接条件连接三个表即可。

要获取聚合列表,请使用聚合函数string_agg和 group by items.title

于 2018-02-11T05:36:14.233 回答