【问题标题】:Fastest way to sort through 'tagging' DB对“标记”数据库进行排序的最快方法
【发布时间】:2012-12-17 19:55:14
【问题描述】:

我设置了一个相当普通的标记系统:

table|'keyword'|   : tag_id        | tag
table|'tag_thread'|: tag_thread_id | tag_id      | thread_id
table|'thread'|    : thread_id     | thread_info

不过,我已经改变了我的标记的显示方式。

我的新想法是在keyword_tbl 中有一个related 列。我决定尝试这条路线,因为我想做一个面包屑系统,并且想“订购”标签,例如,体育 -> 棒球 -> 投手。另外,如果他们输入“棒球”,我希望将 Sports 作为标签的一部分,而不用担心。

keyword_tbl : keyword_id | keyword | related_id

例如:

keyword_tbl:
keyword_id // 1       // 2        // 3
keyword    // sports  // baseball // pitchers
related    // 0       // 1        // 2

0 标志着它是一个“通用”标签,是最广泛的术语。这意味着对于他们发布的每个线程,我只需要存储一个值(最详细的,或上面示例中的“投手”)。从“Pitcher”开始,我可以导出相关字段,并以向后的方式创建面包屑。

我的问题是:哪条路线更适合我尝试用面包屑做的事情?我打算这样做的方式有什么特别错误的地方吗?

谢谢

【问题讨论】:

标签: php mysql database tagging


【解决方案1】:

这里有一些潜在的问题(但这并不意味着你走错了路)。

通常,标签是一个比类别更宽松的概念。听起来您将它们混合在一起,这可能是个问题。当你有一个适用于棒球和足球领域的人的标签(比如“左撇子”)时会发生什么?发明标签是为了避免这种分类问题,在这种分类问题中,所有事物都需要一个父级。

找出相关标签集的查询可能效率低下/混乱,具体取决于您可能拥有多少级别的面包屑。谁负责将标签分类成树?如果它是一个管理功能(因此不会经常发生),您可能需要创建一个“物化视图”来保存每个标签的所有相关标签。

【讨论】:

  • 感谢您的反馈。要回答您的问题,用户将能够创建自己的标签。如您所描述的涉及“左撇子”的标记系统的问题是,如果用户正在查看“左撇子”标签并创建帖子,则无法将其分类为“棒球”、“足球” ”或“运动”。这就是我试图克服的问题。
  • 这就是我的观点——无论实现如何,标记和分类作为概念都不是很兼容。你见过他们像这样成功地混合在一起吗?我很好奇,因为两者都很有用,我只是不知道如何一起使用它们。您可以有单独的标签和类别,但这听起来对您的用户来说是额外的工作。
  • 有趣。我会回复你的。现在,我将其标记为正确。虽然不是我正在寻找的答案,但肯定会帮助我发展这个概念。
猜你喜欢
  • 2011-10-06
  • 2011-10-14
  • 2016-10-06
  • 1970-01-01
  • 2011-09-10
  • 2019-07-18
  • 2014-11-07
  • 2015-06-28
  • 2021-07-20
相关资源
最近更新 更多