0

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

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

然而,我已经改变了我的标签的显示方式。

我的新想法是relatedkeyword_tbl. 我决定尝试这条路线,因为我想做一个面包屑系统,并且想“订购”标签,例如,体育 -> 棒球 -> 投手。此外,如果他们输入“棒球”,我想将 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”开始,我可以派生相关字段,并以向后的方式创建面包屑。

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

谢谢

4

1 回答 1

1

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

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

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

于 2012-12-17T20:14:16.887 回答