0

使用 SQL Server 2008 及更高版本中的 hierarchyid 数据类型,尝试优化 /1/1/8/ [ /1/1/8/x/ ] 的下一个子节点的发布是否有任何好处,使得 x 是最接近 1 的非负整数可能吗?

一个简单的解决方案似乎是找到分配的最大子值并将兄弟值移到正确的位置,但看起来你最终会耗尽这个(理论上如果不是在实践中),因为你永远不会回收任何值并且我的理解,否定和非整体占用更多空间。

示例:如果我有一个/1/1/8/有这些孩子的父母(孩子的顺序无关紧要,重新分配值是可以的):

/1/1/8/-400/
/1/1/8/1/
/1/1/8/4/
/1/1/8/40/
/1/1/8/18/
/1/1/8/9999999999/

我不希望下一个孩子有/1/1/8/2/吗?

4

1 回答 1

0

事情就是这样。

您所说的将是“最佳”的不一定是最佳的。

当我将值插入层次结构时,我通常不关心特定节点的子节点的顺序是什么。

如果我这样做,这就是 GetDescendant 中有两个参数的原因。

如果我想将节点添加到顺序中(即首先生成),我使用 NULL 的第一个参数和其他子节点的最小值的第二个参数。

如果我想将节点附加到顺序中(即使其最后),我使用其他子节点的最大值的第一个参数和 NULL 的第二个参数。

如果我想在其他两个子节点之间插入,我需要一个在我要插入的节点之前和之后的一个。

在任何情况下,通常层次结构字段中的值并不重要,因为您将按名称或其他字段等不同的字段进行排序。

因此,将事物添加到层次结构中的最“有效”方法是添加或附加,因为查找 MIN 或 MAX 层次结构值很容易,并且按照您的描述进行操作需要多次查询才能找到第一个“洞”树。

换句话说,除非您将它们用于使用层次结构值进行排序的应用程序,否则不要对层次结构的字符串表示形式赋予太多含义。

即使在这种情况下,您也可能不想像您描述的那样填写层次结构值,并且可能无论如何都希望追加到末尾。

希望这有帮助。

于 2014-01-23T20:08:18.143 回答