实现标签的最佳方式(类似于StackOverflow)

时间:2010-12-13 23:04:51

标签: asp.net sql-server algorithm

  

可能重复:
  How do you recommend implementing tags or tagging

我的网站上有一个包含大量文章的数据库。我想实现类似于stackoverflow上的标签的标签。

我可以想到实现它们的两种基本方法:

  1. 创建一个单独的Tags表,其中包含与我的Articles表的一对多关系。

  2. 在我的文章表格中添加标签文本字段。

  3. 第一种方法似乎是最好的,但需要两个额外的表,这些表会变得非常大。似乎还有相当大的开销更新和维护数据。

    第二种方法更容易实现和维护,并且使用更少的资源。但搜索效率会降低。我可能会使用LIKE甚至是全文搜索。

    我对其他人认为最好的方法感兴趣。或许还有另一种方法。

2 个答案:

答案 0 :(得分:7)

我个人会选择选项1,之后再提两个表,所以我假设您正在考虑。

Table -Tag
Fields - TagID, TagName

Table -TagArticle
Fields - ArticleID, TagID

Table - Article
Fields - ArticleID, blah, blah, blah

这不应该在存储方式上比转储到Article中的字段要多得多。此外,它是标准化的,它将始终为您的未来做好准备,并使您的数据库能够更好地按标签搜索文章。至于更新,你可能只会偶尔更新你阅读的次数,所以影响应该可以忽略不计,我不能想到任何维护任务,除了确保你的指数是最新的,你要去的无论如何必须在其他桌子上做,并且应该是自动化的。

附加福利意味着您可以快速创建顶级标签列表或标签云等内容。

答案 1 :(得分:2)

第一种选择显然是两者中最好的。这适用于关系模型,并使您的数据规范化。第二个选项适用于关系模型,并打破了规范化。您如何运行诸如“给我十大最受欢迎的标签”之类的查询?或者“标签'x'被使用了多少次?”使用选项1,这些查询变得微不足道,尤其是(假设Robb的模式),您可以针对每个标记保留Count列。

选项2可以让您略微简化功能的大量损失(从长远来看,我认为,效率也是如此)。关系模型经过试验,测试和工作!使用它!

相关问题