您将如何设计数据库以支持以下标记功能:
理想情况下,使用(至少)一组 n 个给定标签标记的所有项目的查找应该使用单个 SQL 语句完成。由于要搜索的标签数量以及任何项目上的标签数量都是未知的并且可能很高,因此使用 JOIN 是不切实际的。
有任何想法吗?
感谢到目前为止的所有答案。
但是,如果我没记错的话,给出的答案显示了如何对标签进行 OR 搜索。(选择具有一个或多个 n 标记的所有项目)。我正在寻找有效的 AND 搜索。(选择具有 ALL n 标签的所有项目 - 可能还有更多。)
关于ANDing:听起来你正在寻找“关系除法”操作。本文以简明易懂的方式介绍了关系划分。
关于性能:基于位图的方法直观地听起来很适合这种情况。但是,我不相信“手动”实现位图索引是一个好主意,就像 digiguru 建议的那样:每当添加新标签时,这听起来很复杂(?)但是一些 DBMS(包括 Oracle)提供位图索引,这可能会以某种方式很有用,因为内置的索引系统消除了索引维护的潜在复杂性;此外,提供位图索引的 DBMS 应该能够在执行查询计划时适当地考虑它们。