AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2021, 18:59   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от trud Посмотреть сообщение
нет, так нельзя, в Relation доступны только поля таблицы
да и непонятно, как работать с такими таблицами - все переводить на View? т.е. простейший while select не сделаешь
Цитата:
Сообщение от Logger Посмотреть сообщение
Проектировали по-другому структуру данных ? А как ?
Попробую угадать как мыслили себе это проектировщики 2012-й / 365-й

Возьмем связку
InventTrans - SalesLine
или
InventTrans - SalesTable

Раньше (ax4 - ax2009) были связи :

Для SalesLine
\Data Dictionary\Tables\InventTrans\Relations\SalesOrderLine
условия:
InventTrans.InventTransId == SalesLine.InventTransId
при этом неявно подразумевалось Fixed условие
InventTrans.TransType == 0

Для SalesTable
\Data Dictionary\Tables\InventTrans\Relations\SalesOrderNum
условия:
InventTrans.TransType == 0
InventTrans.TransRefId == SalesTable.SalesId

Для фильтрации / связи всегда добавлялось условие по InventTrans.TransType


В 2012-й придумали промежуточную табличку со связью
InventTransOriginSalesLine

т.е. чтобы перейти от InventTransOrigin к SalesLine
идет джоин
InventTransOrigin - InventTransOriginSalesLine - SalesLine

В каждой связи нет Fixed условия по InventTransOrigin.ReferenceCategory (это аналог InventTrans.TransType).
Его заменила InventTransOriginSalesLine.
т.е. вместо фильтра по полю с типом записи мы просто джоиним нужную табличку сязей.

От InventTransOrigin к InventTransOriginSalesLine связь
InventTransOriginSalesLine.InventTransOrigin == InventTransOrigin.RecId

а от InventTransOriginSalesLine к SalesLine :
InventTransOriginSalesLine.SalesLineDataAreaId == SalesLine.dataAreaId
InventTransOriginSalesLine.SalesLineInventTransId == SalesLine.InventTransId



Ну в вашем случае, аналогия такая
atest -- InventTransOrigin
atest_cust -- InventTransOriginSalesLine
atest_vend -- InventTransOriginPurchLine
CustTable -- SalesLine
VendTable -- PurchLine

atest_cust новая табличка связей
поля
CustAccount
(если извращаться то refRecId ссылка на atest)

atest_Vend
поля
VendAccount
(если извращаться то refRecId ссылка на atest)

Ну и в случае фильтрации / связи вместо условия на atest.CustVendCode делаем джоин либо с atest_cust либо с atest_vend

А поле atest.CustVendCode как бы и не нужно.

Правда если табличка atest не предполагает других полей, то нужна ли она вообще ? Ее можно заменить union вьюхой от atest_cust и atest_vend


Все это выглядит несколько громоздко и не очень удобно.
Зачем они так сделали ?
Возможно хотели упростить работу оптимизатора запросов SQL.
Если предположить что в нашей табличке для клиентов миллионы записей, а для поставщиков - десятки, то возможно оптимизатору проще будет запросы строить и не промахиваться с оценками.

Последний раз редактировалось Logger; 27.01.2021 в 19:08.
За это сообщение автора поблагодарили: sukhanchik (6).
Теги
best practice, enforcefkrelation, forein key, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axtools: AX2012 R2 hotfix available to improve compile speed Blog bot DAX Blogs 1 01.05.2013 03:53
Axilicious:Running AX2012 R2 locally on Windows 2012 Server booted directly from VHD Blog bot DAX Blogs 0 16.04.2013 08:13
emeadaxsupport: The 'view details' feature will not work on an EDT field when the field has a relation defined in the 'table references' subnode. Blog bot DAX Blogs 0 26.01.2013 02:14
ukax: Dynamics AX2012 R2 Launches!!!! Blog bot DAX Blogs 0 04.12.2012 19:11
Universal Field Changer new version for Microsoft Dynamics AX2012 Blog bot DAX Blogs 0 18.01.2012 04:34

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:44.