【发布时间】:2010-09-08 02:07:10
【问题描述】:
您将如何设计数据库以支持以下标记功能:
- 项目可以有大量标签
- 必须快速搜索使用给定标签集标记的所有项目(项目必须具有所有标签,因此它是 AND 搜索,而不是 OR 搜索)
- 创建/写入项目可能会更慢以实现快速查找/读取
理想情况下,应使用单个 SQL 语句来查找(至少)带有一组 n 个给定标签的所有项目。由于要搜索的标签数量以及任何项目上的标签数量都是未知的并且可能很高,因此使用 JOIN 是不切实际的。
有什么想法吗?
感谢到目前为止所有的答案。
不过,如果我没记错的话,给出的答案显示了如何对标签进行 OR 搜索。 (选择具有一个或多个 n 标记的所有项目)。我正在寻找有效的 AND 搜索。 (选择所有具有 ALL n 标签的项目 - 可能还有更多。)
【问题讨论】:
-
从扩展的角度来看,您必须使用次要-主要标记技术,否则当大量主要标记出现时性能会下降(它们会这样做)。特别是如果您使用非规范化模式,这会发生得更快 - 对于 RDBMS 解决方案总是
标签: sql database-design tags tagging