设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2004|回复: 6
打印 上一主题 下一主题

[其它] [讨论]设计树形表,能用一条SELECT找出给定任意节点下面所有叶子节点?

[复制链接]
跳转到指定楼层
1#
发表于 2004-4-2 01:44:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前提:树的各分支深度任意且不规则

[此贴子已经被作者于2004-4-1 17:44:17编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2004-4-2 02:59:00 | 只看该作者
看这个能不能帮到你:
http://www.accfans.net/BBS/announce/announce.asp?BoardID=301&id=3077
3#
 楼主| 发表于 2004-4-2 06:33:00 | 只看该作者
你那个是界面显示的说明。

我这里是想讨论数据存储结构

有一个思路是设置一个路径字段,但是路径最好能通过某种规则转化为数值,以方便比较和修改
4#
发表于 2004-4-3 07:32:00 | 只看该作者
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=16261
建立一个递归函数,然后用一条SELECT找出给定任意节点下面所有叶子节点
参看里面的删除节点及“显示全部子节点”功能
5#
 楼主| 发表于 2004-4-3 17:50:00 | 只看该作者

呵呵

用递归函数的话我就不用在这里讨论了

我是想讨论一下有没有对于查找、插入、删除、移动等操作在效率上比较折中的结构设计(存储效率可以适当冗余,因为通常树的数据量不会太大)

如节点ID,父节点ID的表设计形式最常见,插入、移动的效率也高,但是查询与删除的效率并不高
例如:
查找指定节点(不一定是根节点)的所有叶子节点
检查指定节点是否是其他节点的后代
删除某个上层节点等等
都要层层递归,并且不利于在数据端实现(例如ACCESS就没有存储过程)







[此贴子已经被作者于2004-4-3 10:30:18编辑过]

6#
发表于 2004-4-4 04:02:00 | 只看该作者
我只是用递归函数返回一个节点集合,用 in (节点集合) 作为 Select 或 Delete 语句的条件,删除时只执行一次动作,效率比逐条删除明显提高。查询时在一个数据集里也比较快,实际应用于一个2万多的设备数据库里显示4000多条子节点列表为8到9 秒(可以接受)。另外显示TreeView控件时,只显示展开的节点; 在查找和显示子节点增加一个停止查找按钮和显示已查找记录数返回部分子节点都可以提高效率。
保存一个路径和固定位数的关键字(如A0,A1,A001,A002)的方法,查询与删除的效率很高(包括复制),但维护路径和关键字也不方便,还容易出错,可以用在位置和子节点数目比较固定,移动较少的情况,如部门结构等。
7#
发表于 2009-8-2 22:44:13 | 只看该作者
交流 沟通 进步-------兔兔的MSN:pc_hare@163.net QQ:1944529 推荐技巧库之一
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-17 00:10 , Processed in 0.099978 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表