2012-12-17 51 views
0

排序我有一个相当普遍的标签系统设置:最快的方式通过“标记” DB

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

但是,因为我已经改变了我的标签将被显示的方式。

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

keyword_tbl : keyword_id | keyword | related_id 

例如:

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

0标志着事实,这是一个 '通用' 的标签,是最广泛的术语。这意味着对于他们发布的每个线程,我只需要存储一个值(最详细的,或上面例子中的“投手”)。从“投手”开始,我可以派生出相关的领域,并以倒退的方式创建面包屑。

我的问题是这样的:我想用面包屑做什么更好的路线?我的计划是否有人可以看到的方式有什么特别的错误?

谢谢

+0

[看这里看起来和你的一样] [(http://stackoverflow.com/questions/7221196/correct-way-to-set-up-mysql-database-for-related-tag-searches))。 –

回答

1

这里有一些潜在的问题(但这并不意味着你在错误的轨道上)。

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

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

+0

感谢您的反馈意见。要回答你的问题,用户将有能力创建自己的标签。所描述的标签系统存在的问题涉及“左手持有者”,即如果用户正在查看“左手持标签”并创建帖子,则无法在“棒球”,“足球” “或”体育“,以及。这是我试图克服的问题。 –

+0

这是我的观点 - 标记和分类作为概念不是很兼容,不管实现如何。你看到他们混合在一起那样成功吗?我很好奇,因为两者都很有用,我不知道如何一起使用它们。您可以拥有不同的标签和类别,但这对您的用户来说听起来像是额外的工作。 – jfrank

+0

有趣。我会尽快回复你。现在,我会将其标记为正确。虽然不是我正在寻找的答案,但肯定是一个信息丰富的答案,这将帮助我发展这个概念。 –