Показать сообщение отдельно
Старый 06.11.2015, 12:13   #2  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Если прям очень нужен иерархический справочник, то стоит посмотреть, как реализованы те же категории продуктов (таблица EcoResCategory) в AX2012, в первую очередь с т.з. схемы данных и поддержки дополнительных служебных полей и таблиц:
  • ссылка на родительский узел (поле EcoResCategory.ParentCategory) - куда же без нее
  • уровень текущего узла (поле Level)
  • левые и правые ключи для работы с моделью вложенных множеств (поля NestedSetLeft, NestedSetRight) и логика их обновления - используются для реляционной работы с деревом вместо рекурсивного обхода уровней, см. также Nested Set model
  • соответствующие индексы, в т.ч. уникальные
Кроме этого, в AX2012 для Розницы в дереве иерархий могут быть сделаны "исключения", когда иерархические отношения настраиваются не в самом дереве, а в рамках тех или иных акций. Для поддержки таких исключений и упрощения реляционной работы с узлами дерева в модуле Розница есть вспомогательная таблица RetailCategoryContainmentLookup, содержащая все комбинации {узел, родительский узел}, и соотв. логика ее обновления. Также надо обратить внимание на то, что в иерархиях категорий, как и во многих других местах AX2012, первичным ключом записи является RecId, и все ссылки тоже сделаны по RecId.
В таком варианте (ссылки по RecId, модель вложенных множеств) SQL-запросы по категориям работают весьма шустро даже на очень больших и многоуровневых деревьях.
У меня DAX 2009. Не знаю, применимо ли вами сказанное к ней. Но общую мысль уловил.