Мне кажется, что этот способ с использованием id как пути наиболее удобен. Но, чтобы добавить запись, нужно сделать 3 запроса: 1) получить путь родителя; 2) добавить новую запись и узнать ее id; 3) обновить новую запись, добавив полученный id к пути.
Вариант с перемещением ветки не кажется страшным, т.к. в отличие от Nested Sets нужно обновить пути только для текущей ветки, а не для всего дерева.
А вот какие удобства дает level — не понятно. Мне кажется, что это поле избыточно.
А где можно почитать про эти алгоритмы? У меня получается 3 запроса на добавление записи и 2 на чтение. Использовать Nested Sets не хочется, т.к. пересчитывать все узлы для дерева при добавлении / удалении / перемещении записи кажется накладным.
Вариант с перемещением ветки не кажется страшным, т.к. в отличие от Nested Sets нужно обновить пути только для текущей ветки, а не для всего дерева.
А вот какие удобства дает level — не понятно. Мне кажется, что это поле избыточно.