看了jessezhao的Web2.0里面的Tags功能的实现 ( http://www.cnblogs.com/jessezhao/archive/2007/03/20/680520.html)。
于是把自己的tags实现也贴上来吧:
1.表的关系
我是用三个表来实现的:一个主的文章表,两个tags的附加表。

2.数据插入
在文章表news里边有一个字段news_tags,放置该文章的所有tags。
比如一个简单的文章:五邑大学第十四届辩论赛
添加者提取的tags是:五邑大学 第十四届辩论赛 赛徽 辩题
这四个tag就放在news_tags里边。
插入这个文章的代码实现上有四个过程,后边三个用事务实现就是了:
单个tag是否存在(已经存在就跳过最后一步的单个tag插入),文章插入(news),tag和文章连接的插入(news_tags_link),news_tags还不存在的单个tag插入
3.数据修改
修改这个文章就只是需要加多一个删除原来的news_tags_link就可以了。
代码实现上有五个过程,后边四个是用事务来实现:
单个tag是否存在(已经存在就跳过最后一步的单个tag插入),文章插入(news),删除所有的与该文章相关的news_tags_link,tags和文章连接管理的插入(news_tags_link),news_tags的单个tag插入
很容易看到,这个方法没有删除news_tags中多余的tag(在news修改时候删除的tags)。
不好意思,文章乱乱的。希望能看明白。