先在很多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文章最多这种统计的信息

解决方案 »

  1.   

    应该建哪些索引呢?
    每个表上的aid,tid都要建吗?
      

  2.   

    aritlce: aid索引
    tag: tid索引
      

  3.   

    谢谢 WWWWA 明天结贴 o(∩_∩)o...
      

  4.   

    1、你的设计完全符合标准的3NF
    缺点是有连表开销
    2、aritlce表 (aid, aname, acontent,tagname,category_name)
    这样只需要一个单表,缺点是冗余数据太多。
      

  5.   


    这个方法很好了[align=center]====  ====
    [/align]
      

  6.   

    yueliangdao0608你这样写的话tagname这列怎么写呢?用逗号分隔吗?这样如果我要显示最热门的标签(比如top10)这样的统计信息貌似性能很低而且很麻烦啊
      

  7.   


    你的意思是tagname保存在文章表里,同时也往tag表里面存数据?这个也不错,就是跟你上面说的一样有冗余了,看来没有两全其美的方法啊
      

  8.   

     aritlce表 (aid, aname, acontent)  
     tag表(tid,tname)  
     tag-article表(aid, tid) 你的设计非常的正确与合理.
    为了给标签排列进行热门标签统计,建议在tag表上增加一个字段:usecount //使用次数
    tag表(tid,tname,usecount) 若不这样,从性能上来说对tag-article表进行热门标签统计性能是很低的.尤其是tag-article表很大的时候(这个表是比较容易大的,因为一篇文章可以有很多个标签)增加usecount字段的代价就是要多一些更新操作(update).所以不建议在这个字段上加索引(因加索引后频繁更新的话相对来说会慢一些).
    一般热门标签(如最热门的前100个标签),从数据库读取之后最好进行缓存.这样可确保性能.
      

  9.   

    关于联表的性能,只要索引建得恰当,
    如3楼说的
    aritlce: aid索引 
    tag: tid索引 
    上建索引就是很正确的.
    这样数据查询会先根据索引来确定需要读取的数据,而索引通常情况下都是缓存在内存中的(这个要mysql服务器设置好),当然速度自然不可能会慢的.
    可以说只要有适当的索引,联表对性能的影响是非常小的.
      

  10.   

    热门标签和你的标签表tag-article表(aid, tid)属性完全一样就可以了。
      

  11.   

    冗余,非常多的冗余
    aritlce表 (aid, aname, acontent,tname) 
    tag表(tid,tname) 
    tag-article表(aid, tid,tcount) 
    这个怎么样啊