我的网站上有一个包含大量文章的数据库。我想实现类似于stackoverflow上的标签的标签。
我可以想到实现它们的两种基本方法:
创建一个单独的Tags表,其中包含与我的Articles表的一对多关系。
在我的文章表格中添加标签文本字段。
第一种方法似乎是最好的,但需要两个额外的表,这些表会变得非常大。似乎还有相当大的开销更新和维护数据。
第二种方法更容易实现和维护,并且使用更少的资源。但搜索效率会降低。我可能会使用LIKE甚至是全文搜索。
我对其他人认为最好的方法感兴趣。或许还有另一种方法。
答案 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可以让您略微简化功能的大量损失(从长远来看,我认为,效率也是如此)。关系模型经过试验,测试和工作!使用它!