先在很多blog都有文章标签的功能,就是说一片文章不仅可以有一个分类,还可以给文章额外的添加一些标签,比如一篇跟smarty,mysql,php有关的文章可以放到php分类里面,但是用户还可以给文章贴标签,比如smarty标签和mysql标签。csdn发帖的地方就有这个功能(刚发现)我想请教一下这种功能数据库怎么实现最方便,我是新手哦我自己设计的,想知道还有什么更加简单的方法aritlce表 (aid, aname, acontent)
tag表(tid,tname)
tag-article表(aid, tid)数据库例子aritlce表
--------------------------
aid aname acontent
1 hehe hehehe
2 hehe hehehe
3 hehe hehehe
--------------------------
tag表
--------------------------
tid tname
1 php
2 smarty
--------------------------
tag-article表
---------------------------
aid tid
1 1
1 2
2 1
----------------------------
这样设计我觉得应该可以,但是查询一篇文章要连接3张表,会不会有性能上的问题,此外可能还要列出那些tag文章最多这种统计的信息
tag表(tid,tname)
tag-article表(aid, tid)数据库例子aritlce表
--------------------------
aid aname acontent
1 hehe hehehe
2 hehe hehehe
3 hehe hehehe
--------------------------
tag表
--------------------------
tid tname
1 php
2 smarty
--------------------------
tag-article表
---------------------------
aid tid
1 1
1 2
2 1
----------------------------
这样设计我觉得应该可以,但是查询一篇文章要连接3张表,会不会有性能上的问题,此外可能还要列出那些tag文章最多这种统计的信息
每个表上的aid,tid都要建吗?
tag: tid索引
缺点是有连表开销
2、aritlce表 (aid, aname, acontent,tagname,category_name)
这样只需要一个单表,缺点是冗余数据太多。
这个方法很好了[align=center]==== 思想重于技巧 ====
[/align]
你的意思是tagname保存在文章表里,同时也往tag表里面存数据?这个也不错,就是跟你上面说的一样有冗余了,看来没有两全其美的方法啊
tag表(tid,tname)
tag-article表(aid, tid) 你的设计非常的正确与合理.
为了给标签排列进行热门标签统计,建议在tag表上增加一个字段:usecount //使用次数
tag表(tid,tname,usecount) 若不这样,从性能上来说对tag-article表进行热门标签统计性能是很低的.尤其是tag-article表很大的时候(这个表是比较容易大的,因为一篇文章可以有很多个标签)增加usecount字段的代价就是要多一些更新操作(update).所以不建议在这个字段上加索引(因加索引后频繁更新的话相对来说会慢一些).
一般热门标签(如最热门的前100个标签),从数据库读取之后最好进行缓存.这样可确保性能.
如3楼说的
aritlce: aid索引
tag: tid索引
上建索引就是很正确的.
这样数据查询会先根据索引来确定需要读取的数据,而索引通常情况下都是缓存在内存中的(这个要mysql服务器设置好),当然速度自然不可能会慢的.
可以说只要有适当的索引,联表对性能的影响是非常小的.
aritlce表 (aid, aname, acontent,tname)
tag表(tid,tname)
tag-article表(aid, tid,tcount)
这个怎么样啊