我不是数据库程序员,但我有一个简单的数据库支持的应用程序,其中有带有标签的项目。每个项目可能有多个标签,所以我使用一个典型的联结表(像这样),其中每一行表示具有适当 ID 的项目具有具有适当 ID 的标签的事实。
当我想做一些事情,比如选择具有给定标签的所有项目时,这非常合乎逻辑。
但是,进行搜索的典型模式是什么AND
?也就是说,如果我想找到所有具有某组标签的所有项目怎么办?这是一个如此常见的操作,我认为一些介绍教程会涵盖它,但我想我没有找对地方。
我尝试的方法是INTERSECT
首先直接使用,然后使用子查询和IN
. 这很有效,但在我添加搜索词时会快速构建看起来很长的查询。而且,至关重要的是,这种方法似乎比将所有标签作为文本推入一个“标签”列并使用 SQLite 的全文搜索的方法慢一个数量级。(而且,正如我所期望/希望的那样,当我添加更多术语时,FTS 搜索会变得更快,而 INTERSECTS 方法似乎并非如此。)
什么是正确的设计模式,什么是让它变得活泼的正确方法?在这种情况下,我使用的是 SQLite,但我最感兴趣的是一个一般性的答案,因为这一定是一件很常见的事情。