数据库 – 如何使用嵌套集合模型对存储的树进行排序?
当我提到嵌套集模型,我的意思是描述
here.
我需要在用户定义的层次结构中建立一个新的系统来存储“类别”(我不能想到更好的词)。由于嵌套集合模型是针对读取而不是写入进行优化的,所以我决定使用它。不幸的是,在研究和测试嵌套集时,遇到了如何用排序节点显示分层树的问题。例如,如果我有层次结构: root finances budgeting fy08 projects research fabrication release trash 我想要将其排序,使其显示为: root finances budgeting fy08 projects fabrication release research trash 请注意,制造在研究之前出现。 无论如何,经过长时间的搜索,我看到了答案,例如“将树存储在多维数组中并对其进行排序”,并将“将树序列化为嵌套集模型”(我正在进行…)。无论哪种方式,第一个解决方案是对RAM和CPU的可怕浪费,这两者都是非常有限的资源…第二个解决方案看起来像很多痛苦的代码。 无论如何,我能够弄清楚如何(使用嵌套集模型): >在SQL中启动一个新树 所以我想到#5和#6可以用来做我想要的排序,它也可以用来重新排序顺序的树。 然而,现在我已经看了所有这些我学会了的事情,我看到#3,#5和#6可以一起使用来执行排序插入。如果我做了排序插入,它总是排序。但是,如果我更改了排序条件,或者我想要一个不同的排序顺序,我回到了一个平方。 这可能只是嵌套集模型的局限性吗?它的使用抑制输出的查询排序? 解决方法我认为这是嵌套集模型的限制。因为结构集的顺序对于重建树结构是至关重要的,所以不能轻易地对它们各自的父节点内的子节点进行排序。我认为这是插入,更新或删除节点时保持树分类的最佳方法。这甚至使查询速度非常快,这是该数据结构的主要目标之一。如果您为所有操作实施存储过程,则使用起来非常简单。 您还可以反转预分类树的排序顺序。你只需要使用ORDER BY node.rgt DESC而不是ORDER BY node.lft ASC。 如果您真的需要支持另一种排序标准,则可以通过向每个节点添加一个第二个lft和rgt索引来实现,并在每次插入/更新/删除时按其他条件进行排序。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 在transactionscope中打开sql连接很重要
- sql-server – 存储过程与函数编译和性能差异
- sql – 如何使用ADO和VB将NULL或空字符串传递给存储过程输入
- 防SQL注入 生成参数化的通用分页查询语句
- SqlServer 错误:"SQL Server 无法生成 FRunCM 线程
- 二十行语句实现从Excel到mysql的转化
- 方法’Boolean Contains(System.String)’不支持对SQL的翻译
- CentOS 下yum安装mysql、jdk和tomcat的方法
- 优化mysql的limit offset的例子
- SQLServer2005新的高效分页方法(优于其它任何方法)