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 に 2 つのパラメーターがあるのはそのためです。

ノードを順序の先頭に追加する (つまり、最初に作成する) 場合は、NULL の最初のパラメーターと、他の子の最小値である 2 番目のパラメーターを使用します。

ノードを順序に追加する (つまり最後にする) 場合は、他の子の最大値の最初のパラメーターと NULL の 2 番目のパラメーターを使用します。

他の 2 つの子ノードの間に挿入する場合は、挿入するノードの前と後の両方が必要です。

いずれにせよ、通常、階層フィールドの値は実際には重要ではありません。名前などの別のフィールドで並べ替えるからです。

したがって、階層に物を追加する最も「効率的な」方法は、先頭または末尾に追加することです。これは、MIN または MAX 階層値を見つけるのは簡単であり、説明していることを実行するには、最初の「穴」を見つけるためにいくつかのクエリが必要になるためです。木。

つまり、階層の値を使用してソートするアプリケーションで使用する場合を除き、階層の文字列表現に多くの意味を持たせないでください。

その場合でも、説明したように階層値を入力したくない可能性があり、とにかく最後に追加したいでしょう。

これが役に立ったことを願っています。

于 2014-01-23T20:08:18.143 に答える