1

我们有用于发布文章的内部应用程序,使用 SQL Server 2005。

对于任务,我需要在用户发布帖子时保存标签列表。

我是否应该为标签创建一个单独的表,并使用列出它的帖子的 ID 更新标签的 ID 列,使用 XML 列,如

TABLE_TAGS
TAG_NAME varchar, ARTICLE_IDS XML

或者

在 ARTICLE 表本身中创建一列,如

TABLE_ARTICLE 
COLUMN_TAGS XML //  and store tag, the post is associated with.

当用户点击“标签云”中​​的特定标签时,我们需要调出带有该标签的帖子,就像任何博客一样。我们还需要嵌套的 SQL 语句来显示更多点击或讨论等的帖子,例如

SELECT ARTICLE_TITLE, ARTICLE_URL FROM
TABLE_ARTICLE 
WHERE
ARTICLE_ID = 
(SELECT ARTICLE_IDS FROM TABLE_TAGS
WHERE TAG_NAME = @TAGTOFIND)

我不确定如何以及在添加、更新或效率方面的最佳方法是什么。

还有其他提示吗?

谢谢

4

4 回答 4

4

文章tags_model_01

SELECT  ArticleTitle
       ,ArticleURL
FROM    Article AS a
        JOIN Article_Tag AS x ON x.ArticleID = a.ArticleID
        JOIN Tag AS t ON t.TagID = x.TagID
WHERE   t.TagName = @SomeTag
于 2010-01-03T22:54:47.430 回答
0

处理多对多关系的常用方法是使用连接表(又名联结表、桥接表、直通表等......)。因此,您将有一个标签表、一个文章表和第三个“文章上使用的标签”表,其中只有 TagId 和 ArticleId 外键。要找出哪些标签与任何给定文章相关联,或者哪些文章与任何给定标签相关联,您将对目标表(标签或文章)和连接表执行连接查询。

于 2010-01-03T22:16:45.840 回答
0

如果是我——这可能不对……

除了您的文章表之外,我还会使用两个表:

  • 标签的一张表:ID,标签
  • 将文章链接到标签的一张表:ArticleID、TagID

这将涉及维护文章标签的大量工作(解析标签列表,标签是否存在,如果不创建等),然后是另一边(搜索 - 按标签和标签,显示,为您的标签计数cloud) 应该更容易,更重要的是,更快,因为您可以索引事物。因为在搜索时你应该做的读取速度远远超过写入速度是关键性能目标。

于 2010-01-03T22:17:54.850 回答
0

将 XML 存储在数据库中自然不利于性能。考虑以规范化的方式将标签存储到文章关系,通过一个实现关系的多对多表:

Table: ArticleTag

ArticleId int
TagId int

这允许您查询标签和文章,而无需借助数据库中的 XML 支持。

于 2010-01-03T22:18:52.463 回答