喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [讨论] 无限级分类的数据库设计  
 
跑呀跑
新手上路
Rank: 1



UID 74961
精华 0
积分 49
帖子 25
金钱 49 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-6-14
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
无限级分类的数据库设计

简单需求分析:   
  1.实现无限级分类。   
  2.实现无限级链接导航   
  3.实现逐级分类下各条信息的查询,包括最多浏览量,最多评论量,最新信息。   
  4.随意转移子分类到任何级别而不用修改分类下的信息表   
  5.使用最少的参数得到所要的信息,URL参数最好只有一个,比如cID=1或者ID=1   
  6.不管多少级,只有一个PHP文件实现类列表和各种方式的信息调用。   
   
  表为两张,一张分类表,一张信息表。   
  信息表如下:   
   
      `ID`   int(10)   unsigned   NOT   NULL   auto_increment,   
      `cID`   tinyint(3)   unsigned   NOT   NULL   default   '0',   
      `title`   varchar(255)   NOT   NULL   default   'No   Title',   
      `content`   mediumtext   NOT   NULL,   
   
  最简单的无限级分类数据表,只是设置一个parentID来判断父ID   
  数据表如下:   
   
      `cID`   tinyint(3)   unsigned   NOT   NULL   auto_increment,   
      `parentID`   tinyint(3)   unsigned   NOT   NULL   default   '0',   
      `order`   tinyint(3)   NOT   NULL   default   '0',   
      `name`   varchar(255)   NOT   NULL   default   '',   
   
  这样可以根据cID   =   parentID来判断上一级内容,运用递归至最顶层。   
  缺点是只能查询最小分类下的信息。这样就不能完成需求3、4点,而第二点也勉强符合   
   
   
  第二种方法是设置parentID为varchar类型,将父类id都集中在这个字段里,用符号隔开,比如:1,3,6   
  这样可以比较容易得到各上级分类的ID,而且在查询分类下的信息的时候,可以使用如:Select   *   From   information   Where   cID   Like   "1,3%"。这样能比较好解决需求3。不过在添加分类和转移分类的时候操作将非常麻烦。   
   
  我就说到这里,请大家讨论一下如何能够最简单的方法实现无限级分类——考虑性能,代码的简练性,前后台操作的容易性,扩展性!
2007-4-18 11:04 AM#1
查看资料  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2573
帖子 4778
金钱 2570 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[广告]: 代充Paypal帐号美元
第一种方法
建议信息表也保存parentID并跟随分类表的变化而改变
这样虽然降低了修改分类的效率但是提高了获取信息列表的效率
小心 tinyint 它的无符号数范围是 0-255 稍微多做一些添加删除分类的操作容易造成超出id范围的情况 况且你要做的是“无限级”分类
使用第二种方法
可以减少查询数量 但是like匹配的速度一般比较慢
其实添加和移动分类也很简单 添加的时候拼一下字符串 移动的时候判断一下路径再做查询
相比较起来移动操作上第一种方法反而要麻烦 因为要判断移动的对象是否属于自己的子分类 还是需要递归的方法查询

总的来说以上两种方法都比较简单 还有一种左右值方法 编程的时候不太直观修改记录比较复杂 但是查询速度很快




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2007-4-18 12:51 PM#2
查看资料  Blog  发短消息  顶部
 
csk83
注册会员
Rank: 2
一般会员



UID 26045
精华 0
积分 54
帖子 66
金钱 54 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-2-9
状态 离线
[推荐阅读] PHPer们,如果让你们选第二种语言或语言工具,你们会用哪个
最近一直在研究无限分类,以前也研究过不过没有细心分析,写了点不过不完善。

直接引用地址好了:

http://www.phpx.com/happy/thread-125013-1-2.html

http://dev.mysql.com/tech-resour ... rarchical-data.html

http://www.phpobject.net/blog/read.php/69.htm

http://www.nirvanastudio.org/php/hierarchical-data-database.html

邻接列表模型(The Adjacency List Model)

改进前序遍历树

引用自 http://78.nbb.cc/2007-01/16-18-limitless_sort.html




梦里春秋
2007-4-18 01:29 PM#3
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026283 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP