问一个文章管理系统数据库设计的问题
先在很多blog都有文章标签的功能,就是说一片文章不仅可以有一个分类,还可以给文章额外的添加一些标签,比如一篇跟smarty,mysql,php有关的文章可以放到php分类里面,但是用户还可以给文章贴标签,比如smarty标签和mysql标签。
csdn发帖的地方就有这个功能(刚发现)
我想请教一下这种功能数据库怎么实现最方便,我是新手哦
我自己设计的,想知道还有什么更加简单的方法
aritlce表 (aid, aname, acontent)
tag表(tid,tname)
tag-article表(aid, tid)
数据库例子
SQL code
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文章最多这种统计的信息
------解决方案--------------------
但是查询一篇文章要连接3张表,会不会有性能上的问题
只要有合适的索引的话,对性能的影响不大
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
aritlce表 (aid, aname, acontent)
tag表(tid,tname)
tag-article表(aid, tid)
你的设计非常的正确与合理.
为了给标签排列进行热门标签统计,建议在tag表上增加一个字段:
usecount //使用次数
tag表(tid,tname,usecount)
若不这样,从性能上来说对tag-article表进行热门标签统计性能是很低的.尤其是tag-article表很大的时候(这个表是比较容易大的,因为一篇文章可以有很多个标签)
增加usecount字段的代价就是要多一些更新操作(update).所以不建议在这个字段上加索引(因加索引后频繁更新的话相对来说会慢一些).
一般热门标签(如最热门的前100个标签),从数据库读取之后最好进行缓存.这样可确保性能.