Blog数据库设计之Tags表设计

Blog中一篇文章可以有多个Tag,一个Tag也可能包含很多文章,关于什么是Tag,您可以先看看这篇文章
        Tag在使用过程中会有以下的几种操作:
          1、添加
          2、删除

        就这个问题我咨询过不少同行,大部分的回答是在文章表中建立一个存贮Tag ID的字符串类型字段,每个TagID之间使用特殊字符分割,但我觉得这不是一个好的方法,违反了数据库使用的初衷,前几天受同学一句话的提醒,想出了下图中的这种模型:

 

        为了更明白的说清关系,图中的字段没设置太多,主要是中间加了个ArticleRelation表,用来记录Tags和Aritcles之间的映射关系,每个关系一条记录。

用下面的Select可以选出一篇文章的所有Tags:
       SELECT tags.name FROM Tags
       JOIN ArticleRelation
       ON tags.ID = ArticleRelation.TagID
       JOIN Articles
       ON Articles.ID=ArticleRelation.ArticlesID

用下面的Select可以选出一个Tag下面的所有文章:
       SELECT Articles.ID,Articles FROM Articles
       JOIN ArticleRelation
       ON Articles.ID=ArticleRelation.ArticlesID
       JOIN Tags

       ON tags.ID = ArticleRelation.TagID 

 

http://hi.baidu.com/solorez/item/a38d1f1634cee5f9ddeeca8e 

http://www.cnblogs.com/Mainz/archive/2011/04/18/2019630.html 

 

 

posted on 2012-06-28 20:50  小小池  阅读(2475)  评论(1编辑  收藏  举报