2010-03-14 30 views
0

我已经编写了一个小型的论坛软件在PHP的人在帖子线程,我想支持标签。什么是支持标签系统的SQL方案?

我应该为此制作多少个SQL表?并简要介绍标签系统如何工作?

感谢

+0

可能重复:http://stackoverflow.com/questions/20856/how-do-you-recommend-implementing-tags-or-tagging – APC 2010-03-14 20:39:33

回答

4

基本上你需要的标签(ID,标签)表和标签到岗位M:M关系关系表(TAG_ID,POST_ID)。要选择一个给定的标签

select posts.* from posts, tags, post_tags 
    where post_tags.post_id = posts.id 
    and post_tags.tag_id = tags.id 
    and tags.tag = "whatever_tag" 

帖子回应的评论:单个表(TAG,后)的做法,可能会出现“更简单”,但它不是完全可扩展的。如果你决定添加一些额外的信息到你的标签 - 如创建日期或创建它,会怎样?或者让用户拥有“最喜欢的标签”,就像SO这样 - 没有单独的标签表,这将会很棘手。

一般来说,最好保留数据库normalized,即使它在开始的时候看起来很“复杂”。

+0

感谢stereofrog,我想知道如果做1表会更好:标签(tagtitle,entryid)? – Ryan 2010-03-14 21:00:51

+0

我同意stereofrog。 2表方法可能是最好的方法。保持您的标签表清洁和独特也允许M:M关系 – Jayrox 2010-03-14 21:33:48

+0

@Tom:请参阅编辑... – user187291 2010-03-14 21:55:09