MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

树的一种特殊设计(转)

Posted on 2007-09-12 13:37 leekiang 阅读(192) 评论(0)  编辑  收藏 所属分类: oracle
不考虑极端的情况,通常组织机构有个10几个层次就是顶天了。 所有,可以用一个字段存储下所有祖先的信息,例如varchar2(300),其中可以用 '.'隔开。 我的设想是这样的:
id name Nodecode
1 a 1
2 b 1.2
3 c 1.3
4 d 1.2.4
5 e 1.2.5
6 f 1.2.5.6

从6可以直接看到它的上级脉络是6.5.2.1 。当然这里考虑的是级别不多的。但是除非你是很极端的应用,我想还是可以满足的。在插入和更新的时候注意维护nodecode即可。
如果要照到祖先,则只要解析一下nodecode即可。
同理如果要照后代,例如2的后代,则马上可以通过Like的方式获得.

另一篇:
因为TreeKey是个字符串,而1.10会排到1.2, 1.3之前,很显然,这不是我们要的结果。要解决其实也很简单,在编号前面补0,比如,1.10就写成0001.0010,1.2就写成0001.0002,这样排序就不会有问题了。

这让我想起很早前看的微软的一个有关树的软件代码,就看到他们是以000x.000x这种方式进行处理的,当时我还感觉他们怎么这么麻烦,现在想来,才发现是自己无知了,呵呵。



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


网站导航: