构建嵌套集

时间:2012-04-28 07:54:34

标签: database-design adjacency-list-model

我正在处理我正在处理的项目的帮助:如何在嵌套集模型中计算左右,假设所有输入都没有特定的顺序。

分发4种形式,每种形式带4个人,每4个人带4个人。网络向下发展至7代。假设我决定选择任何级别的节点,我怎样才能找到下行器和上行器?

     A
|    |   |   |
B    C   D   E 
             |
         ------------
         |   |   |   |
         F   G   H    J
         |
     ----------
     |   |  |  |
     W   X  Y  Z

说明:

A brings A B C D
E then brings F G H J
F brings WXYZ

依此类推。在第7代,我们经历了停顿。与此同时,每个节点开始谱系下行词。

1 个答案:

答案 0 :(得分:2)

计算左右访问数是一个迭代的程序操作。它不能在单个查询中完成,但您可以通过递归调用自身的单个过程来完成。

您的程序需要有两个参数:

  • 您正在使用的节点的ID
  • 到目前为止使用的最高访问次数(下一次LEFT为+ 1)

该程序需要返回已应用的最高访问次数(最后一次)。

在该过程中,您运行查询以查找具有给定ID的节点的所有子节点。如果它们是有序的,您可以相应地进行排序 - 或者您可以使用任意顺序。对于找到的每个子项,设置左侧数字,然后以递归方式对该子项调用该过程。当递归调用返回时,使用返回代码设置正确的访问次数。

Joe Celko在一本书中有whole chapter,专门讨论如何通过访问次数计算来提高智慧和效率。如果您的数据集非常大且经常被编辑,您可能需要阅读 - 否则您只需在每次编辑节点列表时重新计算所有访问数字。