23.06.2011 20:58, Vlad Khorsun пишет:
>>>    Пиши процедуры для таких задач. По-хорошему советую :)
>> EB вполне устраивает.
>    Он не будет рекурсивным.
Этому есть какие-то причины теоретического плана или технического?

>> Но без возможности рекурсии работа с деревом из него сильно ограничена.
>    Таки есть более другие инстурменты.
По факту единственным универсальным инструментом для работы с деревьями
на сервере остаются рекурсивные сохранёнки. :(
Либо тащить всё на клиента.

>> Даже с применением СТЕ еще удаление решается, а копирование и слияние
>> уже нет.
>    Чёй-та ? (ц)
Про удаление мы вроде бы выяснили:
 delete from ... where id in (with recursive...)
отвалится, если связь без каскадного удаления, т. к. невозможно задать
порядок удаления.

Так же в СТЕ невозможно указать порядок детей. Т. е. в случае его
важности придётся применять рекурсивную процедуру.

Нельзя сделать поиск по путям.

Опять же, такой запрос как посчитать количество дочек для каждого узла в
указанной ветке будет отставать по скорости примерно на степень от
прямой рекурсивной реализации (как O(n) от O(n^2) или больше).
Т. е. даже простые вычисления на дереве с использованием СТЕ
использовать не получится. :(

Так же нет возможности организовать копирование веток, их слияние - т.
е. модификацию дерева.

В сухом остатке получается, что СТЕ - это базовый, но очень ограниченный
механизм. Для нормальной работы придётся либо использовать сохранёнки на
каждый чих, либо проделывать все манипуляции на клиенте...

Да есть вроде ещё один путь: использовать ЕБ и реализовать рекурсию
руками, используя GTT как стек (пока не пробовал).
Но всё же было бы удобнее/проще/надёжнее/производительнее если бы
рекурсию в ЕБ можно было использовать напрямую.

П. С. Ну а если бы механизм СТЕ развился, чтобы покрывать хотя бы часть
этих задач, было бы просто нереально круто! :)
-- 
Александр Замараев

Ответить