当我提到嵌套集模型时,我指的是这里描述的内容.
我需要在用户定义的层次结构中构建一个用于存储"类别"(我想不出更好的词)的新系统.由于嵌套集模型针对读取而不是写入进行了优化,因此我决定使用它.不幸的是,在我研究和测试嵌套集时,我遇到了如何显示带有排序节点的分层树的问题.例如,如果我有层次结构:
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可以一起用来执行排序插入.如果我做了排序插入,它总是被排序.但是,如果我改变排序标准或者我想要一个不同的排序顺序,我就会回到原点.
这可能只是嵌套集模型的限制吗?它的使用是否会抑制输出的查询排序?