Вычисление SUPERPARENT_ID в дереве. Где вызывать?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
byur
Сообщения: 3
Зарегистрирован: 29 авг 2005, 02:16

Вычисление SUPERPARENT_ID в дереве. Где вызывать?

Сообщение byur » 29 авг 2005, 02:19

Приветсвую всех.

Возник вопросик -- есть табличка, где хранится иерархический справочник (дерево) в виде ID;PARENT_ID. Возникла необходимость первывычеслять (после drag-n-drop перетасовки в GUI юзером узлов дерева) новое значение поля, в которм живет ссылка на "корневой" элемент (у которого нет родителей) -- SUPERPARENT_ID. SP для этого написана. В какой триггер (before update или after update ) эту SP вызывать?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2005, 09:13

и какой толк от нее будет в триггере?

byur
Сообщения: 3
Зарегистрирован: 29 авг 2005, 02:16

Сообщение byur » 29 авг 2005, 14:48

kdv писал(а):и какой толк от нее будет в триггере?
Предложения?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2005, 16:58

идти в сад :) чего ты хочешь? идентификатор родителя записи в дереве меняется одним update. что за sp тобой написана, и зачем, я не представляю. Например, см. "перенос элементов дерева" в
http://www.ibase.ru/devinfo/treedb2.htm

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 29 авг 2005, 17:16

можешь before update
можешь after update
всеревно потом пожалеешь...

Если хочешь править (настраивать) таблицу целиком
просто дерни свою процедуру
а если хочешь править (настраивать) одну запись
дергай before update
только в чем глубинный смысл ХП? обьясни
ты что, в 10-и местах это делаешь?

byur
Сообщения: 3
Зарегистрирован: 29 авг 2005, 02:16

Сообщение byur » 29 авг 2005, 19:08

kdv писал(а):идти в сад :) чего ты хочешь? идентификатор родителя записи в дереве меняется одним update. что за sp тобой написана, и зачем, я не представляю. Например, см. "перенос элементов дерева" в
http://www.ibase.ru/devinfo/treedb2.htm
Ша, Дима не пинай ... :-). Я сформулирую по-человечески. А то в 1:20 ночи уже мозги были не те .... сорри.
Что есть:
Есть иерархический справочник товаров/услуг медцентра, влючая всякие там анализы. Разбито все на категории (например категория АНАЛИЗЫ является "корневой"). Есть группы и подгруппы анализов (узлы 2 и 3 порядка). Вложенность м.б. произвольной -- этим управляют пользователи. Более того -- они для собственного удобства могут создавать дополнительные категории/подкатегории -- и перетаскивать туда из др. элементов дерева items. Есть специфика обработки разных категорий услуг/товаров -- для этого системе нужно знать, что указав в счете например конкретную услугу -- к какой категории она относится! Для этого в этой таблице создано дополнительное поле (поимо классического ID, PARENTID) -- SUPERPARENTID -- в котором есть желание хранить ID "корневого" узла (например тех же АНАЛИЗОВ) -- т.е. обратившись к любому item этого дерева -- можно сказать к какой категории он относится (SUPERPARENTID = ID "корневого" узла) -- а значит понмать как обрабатывать.
Что нужно:
1. При создании нового узла (он же item) -- нужно вычислять значение SUPERPARENTID.
2. При изменении категории у услуги (перетащили ее в др. "корневую" категорию -- перевычислять SUPERPARENTID)
SP для пробегания по дереву вверх до корня, с получением ID "корневого" узла -- создана.
Вопрос:
Где это лучше делать -- вычислять и вставлять в поле SUPERPARENTID значение, полученное из SP -- в триггере? Или на клиенте?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2005, 20:23

опять же, в сад :) где лучше, где хуже... ты ж такую модель придумал, тебе виднее. если тебе вся нужная информация доступна при переносе ветки дерева на клиенте, то можно сразу обновить информацию оттуда. А если не совсем - то в триггере (если доступна там). Если наоборот, для триггера надо еще и процедуру вызывать, то тут надо смотреть, насколько возрастут тормоза. взвесь сам свои частные "за" и "против".

а то прямо - мне мыться мылом или шампунем? шкуру драить мочалкой али губкой? :)

Ответить