Javadream

A long way and a dream.

导航

<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

随笔分类

随笔档案

文章分类

文章档案

Java程序员的心声

搜索

  •  

最新评论

链接: http://forum.javaeye.com/viewtopic.php?t=15829

这是一个很有趣的东西,无限分类问题。

这里涉及到沉余数据的问题,如果不这样做,我们没法很快的对数据进行搜索。

我的方法是,在表中加入layerpath,用特别的符号分隔id;加入parentlayer,用来标记父节点;加入level,用来表示这是第几层(这个可以不要,实际应用中几乎没用,反而加大了修改layer的难度)。

这样做的优点是把搜索的重任交给了数据库,比如说查找某个节点下的所有子节点,包括继承子节点,我们就可以用一刀切的方式取得,而不用遍历树的方法,比如我的layerpath的格式如下:
|1|3|7|8|
我要查找id为1的所有子节点及继承子节点:
SQL:select * from craft where layerpath like '%|1|%';

而修改一个节点的上下文关系时,仅仅只要修改一个parentlayer就行,当然,我们要在修改更新时检查节点的继承关系(这是最重要的)。

当然,这样的设计也会有缺点,当类别数据量太多时,就会让数据库吃不消,就比如电信的电子黄页,就有一千多个类别,至少四层,特别是在搜索时,系统的很容易挂掉。解决方法唯有是用缓存。

只有注册用户登录后才能发表评论。


网站导航: