Показать сообщение отдельно
Старый 06.09.2004, 11:41   #15  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано Владимир Максимов
Дерево... Да... Думаю mazzy Вас пошлет... надеюсь по ссылке...
Да знаю, знаю. Неоднократно видел его мнение по данному вопросу, и... даже уважаю его.

Цитата:
Я с AXAPTA работаю всего полгода, но даже с таким опытом вижу, что Вы себе нажили гемморой на долгие годы вперед. Коламбус, конечно, молодцы, но их цель - это зарабатывание денег, а не объяснение клиентам почему так делать нельзя. И денег на Вас они заработают много...
Се ля ви, се ля бизнес. Я к сожалению точно так же как и коламбус не могу влиять на требования начальства и бизнес-процессы нашей фирмы, приходится выполнять то что приказывают выполнять.

Цитата:
Ладно, если опустить эмоции, то попробуйте в Вашей таблице InventClassifierRelations для каждого узла дерева делать ссылку на самого себя. Т.е. это будут строки у которых ParentId=ChildId и Level=0
Тогда запрос будет элементарен...
Мне кажется решение Vadik-а более элегантно. Добавлять дополнительные ссылки не надо, а EXISTS всё равно должен сработать правильно (если я правильно понимаю SQL и реляц. алгебру).

Цитата:
PS: Мне интересно, как с такой (...) структурой таблицы InventClassifierRelations Вы делаете перемещение узла? Удаление и вставка - это легко, а вот передвинуть ветку со всеми узлами при такой структуре ...
Вообще то это и есть то место, коим данный метод "жертвует" ради скорости и простоты в других местах. Именно здесь проявляется его "корявая древовидная сущность", но на самом деле всё не так уж и плохо - просто надо удалить все записи в InventClassifierRelations, относящиеся к данному узлу и всем его подузлам (1 операция select и n операций delete, где n - число строк вернувшееся select-ом), изменить данные в таблице InventClassifer и запустить рекурсивную процедуру rebuildClassifierRelations для перемещенного узла (выполняется за m * (1 select + n insert), где m - число подузлов в узле, n - число строк в результате select-а.
У нас размер этого классификатора где то 15 элементов на 1-ом уровне и в среднем по 5-10 элементов на остальных подуровнях, так что не всё так уж и плохо.
А вообще то операция перемещения групп настолько редкая штука, что я её даже не реализовывал еще.