Вычисление SUPERPARENT_ID в дереве. Где вызывать?
Вычисление SUPERPARENT_ID в дереве. Где вызывать?
Приветсвую всех.
Возник вопросик -- есть табличка, где хранится иерархический справочник (дерево) в виде ID;PARENT_ID. Возникла необходимость первывычеслять (после drag-n-drop перетасовки в GUI юзером узлов дерева) новое значение поля, в которм живет ссылка на "корневой" элемент (у которого нет родителей) -- SUPERPARENT_ID. SP для этого написана. В какой триггер (before update или after update ) эту SP вызывать?
Возник вопросик -- есть табличка, где хранится иерархический справочник (дерево) в виде ID;PARENT_ID. Возникла необходимость первывычеслять (после drag-n-drop перетасовки в GUI юзером узлов дерева) новое значение поля, в которм живет ссылка на "корневой" элемент (у которого нет родителей) -- SUPERPARENT_ID. SP для этого написана. В какой триггер (before update или after update ) эту SP вызывать?
идти в сад
чего ты хочешь? идентификатор родителя записи в дереве меняется одним update. что за sp тобой написана, и зачем, я не представляю. Например, см. "перенос элементов дерева" в
http://www.ibase.ru/devinfo/treedb2.htm

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

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

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