Показать сообщение отдельно
Старый 06.09.2004, 05:18   #12  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано mazzy
Эк, вас колбасит то...
Колбасит или не колбасит не знаю, но соверешенно объективно:
1. тут в каких то топиках выяснили что по настоящему сложные запросы в axapta построить нельзя из-за неправильной расстановки скобок в получающихся SQL-селектах, да и нет полного соответствия и той гибкости запросов, который доступен в стандартном SQL
2. нет возможности просто и естественно создать и выполнить "динамически конструируемый" запрос .executeQuery( str SelectStatement ), что меня один раз уже сильно угнетало
Впрочем к сути дела это не относится.

Цитата:
Боже мой! Опять дерево.
Да просто концепция иерархичности (дерева) - один из самых понятных, естественных и удобных аппаратов восприятия окружающей нас действительности. С этим ничего не поделать, и несмотря на то что реляционные СУБД не могут решать задачу поддержки древовидных структур произвольной сложности одновременно соблюдая и эффективность и целостность/неизбыточность данных, деревья нужны и деревья важны.

Цитата:
Alks, нет у вас Аксапты, нет у вас компьютера.
Пожалуйста, объясните мне на пальцах или на бумажке что же вы хотите!
Да есть у меня компьютер и есть у меня аксапта и в этой аксапте уже в соответствии с одной из модификаций проекта, выработанного в плотном сотрудничестве с Коламбусом есть древовидный, 4-уровневый классификатор номенклатуры. Он уже работает как фильтр в самом справочнике. Но реализовывал его я наспех и сейчас есть время переделать его на более грамотный лад с лучшей поддержкой ссылочной целостности, так чтобы перевод товара из одной группы в другую не сопровождался появлением геморроидальных трещин на одном, всем известном месте.
Рассказывать чем являлся старый подход не буду, т.к. смысла не имеет.
Новый подход заключается в ведении таблицы InventClassifier ( ClassifId, ParentId, прочие атрибуты... ), а в таблицу InventTable добавлено поле (ClassifId).
Цель изначально стояла в том, чтобы при выделении группы (элемента классификатора) в таблице товаров отфильтровывались все записи, принадлежащие выделенному элементу, либо какому либо из его подэлементов (подчиненных ему групп). Да и каскадное удаление элементов классификатора тоже сталкивалось бы с многочисленными select-запросами. В старом варианте решения это было просто сделать (даже очень просто), а в новом по понятным причинам - совершенно геморройное это дело становится. Для решения этой задачи я ввожу дополнительную таблицу InventClassifierRelations, тем самым внося в базу избыточность (но уже избыточность в строках, а не столбцах, как ранее), где для каждого элемента классификатора храню сопоставление ( ParentId, ChildId, int Level ) для всех его родителей, на каком бы уровне он внутри них не находился, модифицирую методы insert и delete для InventClassifier. Теперь можно очень быстро - за один запрос отобрать все подгруппы для заданной на любом уровне вложенности. Каскадное удаление резко упрощается. И фильтрация классно бы решалась тем запросом про который я говорил...

В скором времени проверю сообщение Vadik-а и если получится, будет ему тысяча благодарностей.