Estou assumindo pelas suas tags e título que você está procurando uma solução que funcione com MySQL .
Sim, você está certo que, a menos que você saiba o número de elementos com antecedência, o valor para
right
precisa ser calculado dinamicamente. Existem duas abordagens que você pode usar:- Você pode começar com o menor valor que funcionar (2 neste caso) e aumentá-lo posteriormente, conforme necessário.
- Você pode apenas fazer um palpite como 1.000.000 e esperar que seja o suficiente, mas você precisa estar preparado para a possibilidade de que não foi suficiente e pode precisar de ajustes novamente mais tarde.
Em ambos os casos você precisa implementar que o
left
e right
os valores para várias linhas podem precisar ser ajustados ao inserir novas linhas, mas no segundo caso você só precisa realizar as atualizações se seus palpites estiverem errados. Portanto, a segunda solução é mais complexa, mas pode fornecer melhor desempenho. Observe que das quatro maneiras comuns de armazenar dados hierárquicos, a abordagem de conjuntos aninhados é a mais difícil para realizar inserções e atualizações. Veja o slide 69 de Modelos para dados hierárquicos de Bill Karwin .