Страница 1 из 1
Вычисление SUPERPARENT_ID в дереве. Где вызывать?
Добавлено: 29 авг 2005, 02:19
byur
Приветсвую всех.
Возник вопросик -- есть табличка, где хранится иерархический справочник (дерево) в виде ID;PARENT_ID. Возникла необходимость первывычеслять (после drag-n-drop перетасовки в GUI юзером узлов дерева) новое значение поля, в которм живет ссылка на "корневой" элемент (у которого нет родителей) -- SUPERPARENT_ID. SP для этого написана. В какой триггер (before update или after update ) эту SP вызывать?
Добавлено: 29 авг 2005, 09:13
kdv
и какой толк от нее будет в триггере?
Добавлено: 29 авг 2005, 14:48
byur
kdv писал(а):и какой толк от нее будет в триггере?
Предложения?
Добавлено: 29 авг 2005, 16:58
kdv
идти в сад

чего ты хочешь? идентификатор родителя записи в дереве меняется одним update. что за sp тобой написана, и зачем, я не представляю. Например, см. "перенос элементов дерева" в
http://www.ibase.ru/devinfo/treedb2.htm
Добавлено: 29 авг 2005, 17:16
tie
можешь before update
можешь after update
всеревно потом пожалеешь...
Если хочешь править (настраивать) таблицу целиком
просто дерни свою процедуру
а если хочешь править (настраивать) одну запись
дергай before update
только в чем глубинный смысл ХП? обьясни
ты что, в 10-и местах это делаешь?
Добавлено: 29 авг 2005, 19:08
byur
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 -- в триггере? Или на клиенте?
Добавлено: 29 авг 2005, 20:23
kdv
опять же, в сад

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