比如一个新闻是二级分类: 
一级分类:donet 二级分类 asp.net, c#.net, vb.net
donet.id=1 ;        asp.net.id=2 ; c#.net.id=3  ; vb.net.id=4查一级分类donet的文章: 文章表是有一级分类id字段好,还是没有好呢
 1.如果有一级分类id字段:   Select * from article where cid=1
 2.如果没有的话:     Select * from article where cid IN (2,3,4)这两中方法从性能来说那中好, 如过从综合方面考虑哪个好?

解决方案 »

  1.   

    建议建一个分类表,结构为:分类ID 父分类ID 分类名 
    则一级分类:donet    记录(1, 0 , ‘donet’)
      二级分类:asp.net  记录 (2, 1, 'asp.net')
               ...
    把一级分类ID和二级分类ID都放进文章表,会造成冗余,不符合第三范式。
    则文章表可设计为:文章ID 分类ID ... 
    如果要找出完整的文章分类路径,可以用2次join连接分类表。性能来说一般还行,当然比直接一次连接差点