小编典典

用于标记的数据库设计

all

您将如何设计数据库以支持以下标记功能:

  • 项目可以有大量的标签
  • 搜索使用给定标签集标记的所有项目必须快速(项目必须具有所有标签,因此它是 AND 搜索,而不是 OR 搜索)
  • 创建/写入项目可能会更慢以实现快速查找/读取

理想情况下,使用(至少)一组 n 个给定标签标记的所有项目的查找应该使用单个 SQL
语句完成。由于要搜索的标签数量以及任何项目上的标签数量都是未知的并且可能很高,因此使用 JOIN 是不切实际的。

有任何想法吗?


感谢到目前为止的所有答案。

但是,如果我没记错的话,给出的答案显示了如何对标签进行 OR 搜索。(选择具有一个或多个 n 标记的所有项目)。我正在寻找有效的 AND 搜索。(选择具有
ALL n 标签的所有项目 - 可能还有更多。)


阅读 61

收藏
2022-08-07

共1个答案

小编典典

关于ANDing:听起来你正在寻找“关系除法”操作。本文以简明易懂的方式介绍了关系划分。

关于性能:基于位图的方法直观地听起来很适合这种情况。但是,我不相信“手动”实现位图索引是一个好主意,就像 digiguru
建议的那样:每当添加新标签时,这听起来很复杂(?)但是一些 DBMS(包括
Oracle)提供位图索引,这可能会以某种方式很有用,因为内置的索引系统消除了索引维护的潜在复杂性;此外,提供位图索引的 DBMS
应该能够在执行查询计划时适当地考虑它们。

2022-08-07