29.06.2017, 11:07 | #201 |
Участник
|
Цитата:
Сообщение от fed
По моему, главная проблема с наследованием таблиц в Ax - это решение о том что родитель содержит в себе все поля всех наследников. Из за этого им пришлось в ранних версиях автоматически делать outer join родителя ко всем наследникам, а в поздних версиях - просто складывать все поля наследников в одну большую таблицу-родителя.
Цитата:
Собственно, чем именно не нравится то, как это реализовано в Аксапте? Да, ядро всегда выбирает набор полей, равный объединению множеств полей всех таблиц-наследников для типа, "через который" идет обращение к таблице в иерархии. Так, если выбирать записи через DirPartyTable, то в выборку попадет под 150 полей (не считая DEL_-полей). Но если заранее более точно знать тип и выбирать, к примеру, DirPerson, то в выборке будет уже лишь 40 полей. При этом выборка через DirPartyTable даст в тех или иных записях кучу полей, содержащих NULL, ну и что с того? Длину строки SQL-запроса это увеличивает, но лишних данных, кроме тех, которые могут понадобиться для приведения к типам-наследникам, не гоняет. Что лично мне не нравится в аксаптовой реализации, так это невозможность использовать поля из разных таблиц иерархии в одном индексе или табличной группе полей |
|
29.06.2017, 11:50 | #202 |
Moderator
|
Ну по моему - такая ситуация и случается в большинстве случаев. Если нужно сделать какой-то универсальный обработчик, то разумнее пробежаться в таблице супео-класса, и тупо потом найти конкретные потомки find'ом. А при нынешнем подходе, оно вытаскивает вообще всех потомков, хотя у меня в обработчике может быть логика только для 2-3 кейзов (а тяжелый outer join строится для всех кейзов, а не только для тех, которые мне реально нужны).
|
|
29.06.2017, 13:08 | #203 |
Участник
|
Ядро и реализует универсальный обработчик - не ошибешься уже Пусть при этом вытаскиваются 150 полей вместо 40, но половина из них содержит NULL, т.е. доп.расходы на "лишний" трафик не столь велики, зато для корректного приведения типа отпадает необходимость повторно обращаться к БД и получать причитающиеся задержки на этом, а также переписывать бизнес-логику для перечитывания данных со всеми вытекающими последствиями, если где-то забыть это сделать.
Опять-таки, тяжелых outer join'ов нет со времен выхода AX 2012 R2, т.е. с декабря 2012-го года, а кто до сих пор работает на AX 2012 RTM - ну извините... Вот ограничения по индексам - это, как мне кажется, куда серьезнее |
|
Теги |
sysoperation framework |
|
|