"Tonal" wrote in message ...
23.06.2011 20:58, Vlad Khorsun пишет:
   Пиши процедуры для таких задач. По-хорошему советую :)
EB вполне устраивает.
   Он не будет рекурсивным.

Этому есть какие-то причины теоретического плана или технического?

   Нет конечно, это мой каприз.

Но без возможности рекурсии работа с деревом из него сильно ограничена.
   Таки есть более другие инстурменты.

По факту единственным универсальным инструментом для работы с деревьями
на сервере остаются рекурсивные сохранёнки. :(

   Не вижу в этом ничего плохого. Ну и это утверждение ничем не доказано.

Либо тащить всё на клиента.

   Глупости какие-то

Даже с применением СТЕ еще удаление решается, а копирование и слияние
уже нет.
   Чёй-та ? (ц)

Про удаление мы вроде бы выяснили:
delete from ... where id in (with recursive...)
отвалится, если связь без каскадного удаления, т. к. невозможно задать
порядок удаления.

   Нет, мы выяснили что есть for with recursive который позволяет не
писать процедуру (А ЧЕМ ПЛОХО ПИСАТЬ ПРОЦЕДУРУ ???)и обойтись без
несуществующего рекурсивного EB

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

   Порядок детей ? В этом обсуждении первый раз слышу об этом.
В более широком стандартном синтаксисе *есть* возможность указать
сортировку на каждом уровне рекурсии отдельно. Но что-то я пока не
встречал более 2-3 просьб это реализовать...

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

   Ты с кем разговариваешь ? Я тебя уже потерял :)

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

   Опять бездоказательное утверждение. И опять не вижу причин отказываться
от процедур.

Т. е. даже простые вычисления на дереве с использованием СТЕ
использовать не получится. :(

   Вот несчатье-то... И ряды Фурье на SQL сложно считать...

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

   Опять без доказательства.

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

   Ну, похоже это твой путь, раз ты другого не нашёл

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

   Можно. В процедурах.

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

   А может ты просто не нашёл решения для части этих задач ?

--
Хорсун Влад

PS Не удивлюсь, если ты окажешься фанатом новомодных лямбда ф-ций (чи как
их там - когда тело ф-ции пишут в месте её вызова, без объявления) :-D

Ответить