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