通过'标记'数据库进行排序的最快方法

时间:2012-12-17 19:55:15

标签: php mysql database tagging

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

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

但是,我已经改变了我的标记显示方式。

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

keyword_tbl : keyword_id | keyword | related_id

例如:

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

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

我的问题是:对于我正在尝试使用面包屑的方法,哪条路线会更好?我计划这样做的方式有什么特别错误吗?有人可以看到吗?

由于

1 个答案:

答案 0 :(得分:1)

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

通常,标签比类别更宽松。听起来你把它们混合在一起,这可能是一个问题。当你有一个适用于棒球和足球人的标签(比方说,“左撇子”)时会发生什么?发明标签是为了避免这种分类问题,其中一切都需要树中的一个父母。

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