我正在构建一个系统,用于存储对文章进行分类的文章和标签。标准的东西,类似于这个网站的方式。现在我的问题是我是否应该将标签存储在一个单独的表中,该表只包含标签和文章ID,或者将标签存储在articles表的额外列中。我的第一直觉是规范化数据库并有两个表。问题是用户管理标签的界面是一个简单的文本框,所有标签都用逗号分隔。因此,当用户提交更改时,为了找出添加,更改或减去哪些标记,我需要首先查询数据库,将结果与基于标记的新数据进行比较,然后相应地处理更改。与简单地更新文章表的一行中的一个字段相比,具有巨大开销的过程。你会怎么做?还是有第三种选择我还没有考虑过?
PD。我被困在这个项目的关系数据库中。
答案 0 :(得分:1)
如果您使用的是单独的表,而不是试图找出每次更改的标记,只需删除所有给定文章ID,然后插入所有提供的标记 - 这应该只会产生很少的开销。 / p>
在标记系统中,通常最重要的性能是标记的检索和/或相关内容的检索。使用带有索引标记列的单独表格可以在项目可以包含任意数量的标记的情况下提供非常快速的查找。
答案 1 :(得分:0)
您需要规范化数据库,以便运行查询,例如“查找包含标记T的所有文章”。
我不认为抓住所有标签以将它们与新标签进行比较会产生很大的开销,假设您已经应用了正确的索引。
就个人而言,我不会删除所有标签,然后插入所有新标签,因为我可能希望在输入单个标签时执行审核等操作。
如果您正在使用SQL Server 2008,那么我建议您查看MERGE命令。