对树上的结点可以进行如下操作:
1. 新增(插入):,新建一个结点,可以插在两个兄弟结点之间,也可以插在某个结点之下做为子结点;
2. 删除:删除某个结点及其子结点;
3. 移动,相当于先删除某个结点,再将这个结点插入到别的地方;
偶想要以树上的结点做为单位信息实体,将整颗树的存储在关系数据库里。
偶的问题就是要怎样设计每个结点包含的信息(本结点与父结点,兄弟结点,子结点之间的关系),以达到以下四个目的:
1. 能完整地重现整颗树;(这个比较容易实现)
2. 因为是在网页上进行操作,所以插入和移动的位置要以列表选择的方式确定;
3. 在进行以上三个操作时,对数据库的操作,也就是要修改信息的结点数是最少的;
4. 能对结点进行信息统计,例如有几个子结点;
开始我是使用直接编号的方式,后面发现不太现实,结点有变动的话,排序在其后的兄弟结点都要受影响;
随后我使用双向链表结构,前后兄弟之间有双向关联,父结点与第一个子结点之间也有双向关联,在进行操作时还是比较麻烦;而且这种结构不利于做结点信息的统计工作;
偶现在已经头大啦,实在想不出什么好的结构来存放,555555555555
各位有没有什么好的建议,或有什么项目实现了类似的功能的也请明示一下。
11 个解决方案
#1
表中,ID,parentID,两个关键字段就可以描述出一棵出来,
#2
试下XML~~就是树型结构的
#3
To leasa(暴暴):
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
To lixiaoxue85(蛮野蛮):
我必须将树存储在关系数据库里。
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
To lixiaoxue85(蛮野蛮):
我必须将树存储在关系数据库里。
#4
http://gcdn.grapecity.com/cs/forums/thread/2183.aspx
树形结构的数据库设计
树形结构的数据库设计
#5
对算法一向没研究
#6
To leasa(暴暴):
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
id parentid name
1 0 父节点
2 1 子节点1
3 1 子节点2
添加
4 1 子节点3
移动
子节点的排序依赖ID,要移动更换ID,也可以重新定义排序的字段,
删除
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
id parentid name
1 0 父节点
2 1 子节点1
3 1 子节点2
添加
4 1 子节点3
移动
子节点的排序依赖ID,要移动更换ID,也可以重新定义排序的字段,
删除
#7
To: wantsong(WantSong)
我看了一下你给的文章,里面第二种存储结构在进行插入、删除和移动操作时要修改的结点还是比较多。不是很适合我的情况。
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
呵呵,依然期待ing..........
我看了一下你给的文章,里面第二种存储结构在进行插入、删除和移动操作时要修改的结点还是比较多。不是很适合我的情况。
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
呵呵,依然期待ing..........
#8
结贴。
没能找到合适的解决方法。
没能找到合适的解决方法。
#9
mark!
#10
加一个序号字段,用来表示这个节点在父节点下的位置。
每次插入新节点,就对其父节点下面的所有子节点重新编号。删除则可以不管。移动的话把插入的一边重新编号即可。
每次插入新节点,就对其父节点下面的所有子节点重新编号。删除则可以不管。移动的话把插入的一边重新编号即可。
#11
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
为什么要改???!!!
这里的ID是用来确定节点记录的(表的Primary Key),应当(SHOULD, not MUST)和业务无关,你所说排序依据,或者其他业务上的字段,请自己加字段
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
为什么要改???!!!
这里的ID是用来确定节点记录的(表的Primary Key),应当(SHOULD, not MUST)和业务无关,你所说排序依据,或者其他业务上的字段,请自己加字段
#1
表中,ID,parentID,两个关键字段就可以描述出一棵出来,
#2
试下XML~~就是树型结构的
#3
To leasa(暴暴):
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
To lixiaoxue85(蛮野蛮):
我必须将树存储在关系数据库里。
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
To lixiaoxue85(蛮野蛮):
我必须将树存储在关系数据库里。
#4
http://gcdn.grapecity.com/cs/forums/thread/2183.aspx
树形结构的数据库设计
树形结构的数据库设计
#5
对算法一向没研究
#6
To leasa(暴暴):
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
id parentid name
1 0 父节点
2 1 子节点1
3 1 子节点2
添加
4 1 子节点3
移动
子节点的排序依赖ID,要移动更换ID,也可以重新定义排序的字段,
删除
要描述一棵树不困难,困难的是这是一棵目录树,我要在树上,以基于编号的方式进行新建,删除,移动等操作。
id parentid name
1 0 父节点
2 1 子节点1
3 1 子节点2
添加
4 1 子节点3
移动
子节点的排序依赖ID,要移动更换ID,也可以重新定义排序的字段,
删除
#7
To: wantsong(WantSong)
我看了一下你给的文章,里面第二种存储结构在进行插入、删除和移动操作时要修改的结点还是比较多。不是很适合我的情况。
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
呵呵,依然期待ing..........
我看了一下你给的文章,里面第二种存储结构在进行插入、删除和移动操作时要修改的结点还是比较多。不是很适合我的情况。
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
呵呵,依然期待ing..........
#8
结贴。
没能找到合适的解决方法。
没能找到合适的解决方法。
#9
mark!
#10
加一个序号字段,用来表示这个节点在父节点下的位置。
每次插入新节点,就对其父节点下面的所有子节点重新编号。删除则可以不管。移动的话把插入的一边重新编号即可。
每次插入新节点,就对其父节点下面的所有子节点重新编号。删除则可以不管。移动的话把插入的一边重新编号即可。
#11
To: leasa(暴暴)
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
为什么要改???!!!
这里的ID是用来确定节点记录的(表的Primary Key),应当(SHOULD, not MUST)和业务无关,你所说排序依据,或者其他业务上的字段,请自己加字段
子节点的排序依赖ID,那要插入的话部分子节点的ID岂不是都要改变。
为什么要改???!!!
这里的ID是用来确定节点记录的(表的Primary Key),应当(SHOULD, not MUST)和业务无关,你所说排序依据,或者其他业务上的字段,请自己加字段