当我提到嵌套集模型,我的意思是描述
here.
我需要在用户定义的层次结构中建立一个新的系统来存储“类别”(我不能想到更好的词)。由于嵌套集合模型是针对读取而不是写入进行优化的,所以我决定使用它。不幸的是,在研究和测试嵌套集时,遇到了如何用排序节点显示分层树的问题。例如,如果我有层次结构:
root finances budgeting fy08 projects research fabrication release trash
我想要将其排序,使其显示为:
root finances budgeting fy08 projects fabrication release research trash
请注意,制造在研究之前出现。
无论如何,经过长时间的搜索,我看到了答案,例如“将树存储在多维数组中并对其进行排序”,并将“将树序列化为嵌套集模型”(我正在进行…)。无论哪种方式,第一个解决方案是对RAM和cpu的可怕浪费,这两者都是非常有限的资源…第二个解决方案看起来像很多痛苦的代码。
无论如何,我能够弄清楚如何(使用嵌套集模型):
>在sql中启动一个新树
>将一个节点作为另一个节点的子节点插入树中
>在树中的兄弟节点之后插入一个节点
>使用层次结构从sql中拉取整个树
>从具有或不具有深度限制的层次结构中的特定节点(包括根)拉取子树
>查找树中任何节点的父节点
所以我想到#5和#6可以用来做我想要的排序,它也可以用来重新排序顺序的树。
然而,现在我已经看了所有这些我学会了的事情,我看到#3,#5和#6可以一起使用来执行排序插入。如果我做了排序插入,它总是排序。但是,如果我更改了排序条件,或者我想要一个不同的排序顺序,我回到了一个平方。