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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.12.2008, 11:25   #1  
nebraska is offline
nebraska
Участник
 
25 / 12 (1) ++
Регистрация: 07.11.2006
Строить ли relation на RecId?
Дано - несколько таблиц, к которым необходимо привязать еще одну. Решаю между 2мя вариантами - добавить в каждую из таблиц новое поле, или связаться полями RecId + TableId.

Как лучше сделать? Неохота городить новые поля и новую номерную серию + следить, чтобы эти поля всегда заполнялись.

Какие могут быть грабли при использовании связей на RecId + TableId?

Заранее спасибо за ответы.
Старый 22.12.2008, 11:32   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
трудности могут возникнуть при переходе на новую версию системы, в частности перенос данных. А так же при переносе таблиц на другие слои. Если данные переносить криво, то можно их потерять. При этом в сис-ме уже есть куча таблиц с привязкой по TableId\RecId...
Короче, если делать все правильно, то проблем не возникнет
Старый 22.12.2008, 11:38   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от nebraska Посмотреть сообщение
Дано - несколько таблиц, к которым необходимо привязать еще одну. Решаю между 2мя вариантами - добавить в каждую из таблиц новое поле, или связаться полями RecId + TableId.

Как лучше сделать? Неохота городить новые поля и новую номерную серию + следить, чтобы эти поля всегда заполнялись.

Какие могут быть грабли при использовании связей на RecId + TableId?

Заранее спасибо за ответы.
Если кратко:
Как выполнять дефрагментирование RecID
__________________
Zhirenkov Vitaly
Старый 22.12.2008, 16:37   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Мне лично связка по RecId не очень нравится.
- Нет перехода к основной таблице (его надо делать, автоматически его нет).
- Неясное (ненаглядное) название полей и когда рыщещь обозревателем таблиц или что еще хуже - на уровне БД - тоскливо разбирать данные
+ Универсальность связки. Когда несколько исходных документов прилинковываются к одному журналу - это удобно.
- Перенос данных. Особенно - если это настройки. Все делабельно... но только на уровне Аксапты - т.е. уже минуя Аксапты это не сделаешь. А иногда (перенос между разработческой, тестовой и рабочей БД) - есть потребность перенести данные не заморачиваясь c RecId
- Опускание в слой. Если таблички свои - то при смене их ID нужно не забыть про уже созданные данные со ссылками по TableId.

В общем-то - это все так... личные предпочтения. Как было замечено выше - при правильном (по MS) подходе - все будет ок.
Но когда-то ранее уже всплывали темки типа а как перейти с SQL Server на Oracle, которые в принципе по MS-ному не делаются . Но при желании делаются в жизни. Так и тут. Я лично предпочту по максимуму избежать связок по RecId именно в рамках облегчения администрирования.

Кстати. На одном из проектов - возникла необходимость код строки настроечной таблицы вставлять в транзакционную таблицу (ну это тоже самое, что в бух проводки вставлять код профиля разноски). Было принятно решение (не мной) - что будем вставлять RecId.
В результате - были получены на рабочей базе настройки, непереносимые в принципе. Т.е. нельзя было настроить все на тестовой, а потом перенести на рабочую, т.к. "разъехались" бы RecId.
__________________
Возможно сделать все. Вопрос времени
Старый 23.12.2008, 04:47   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
+ Универсальность связки. Когда несколько исходных документов прилинковываются к одному журналу - это удобно.
Не. Нет этого плюса.
RecID позволяет привязать любую таблицу. Именно ЛЮБУЮ. Только в коде приходится постоянно гадать "какая таблица прилинкована?" и проверять, проверять, проверять. В лучшем случае делают два поля TableId и RecID.

Но вместо этого лучше пользоваться составлными ключами из двух полей (Tag, RefCode). Настроив связи между НУЖНЫМИ таблицами в АОТ. В этом случае вообще БЕЗ программирования достигается и переход к основной таблице, и validate, и lookup.

Не, приведенный тобой список не содержит плюсов.
Лично я вообще не вижу плюсов в RecId. По моим ощущениям, связкой по RecID пользуются только те программисты, которые не разобрались с автонумерацией, только те, кто не знает как быстро "смастрячить" новый уникальный код.

http://axapta.mazzy.ru/lib/numbersequence/
http://axapta.mazzy.ru/lib/numbersequence_using/
http://axapta.mazzy.ru/lib/numbersequenceformat/
__________________
полезное на axForum, github, vk, coub.
Старый 23.12.2008, 10:08   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2mazzy: Я и не говорил о том, чтобы использовать RecId без TableId. Одно без другого не живет.
А вот как предполагается в таком случае связывать таблицы при необходимости сделать некий лог/журнал/историю в которую сыпятся данные из разных мест?
Или другой пример. Я хочу "наклепать" журналы ГК (складские журналы и т.д.) из некой своей надстройки. Я хочу сделать связку. Мне очень нравится идея (за вычетом моих минусов) прописать в ЖГК TableId, RecId со ссылкой на мой исходный документ. Независимо от того - какие ключи у меня в таблицах используются.

В принципе - все решаемо номерной серии. Ведь даже корреспонденция (связка) сделана через номерную серию.

Понятно - что одно из решений проблемы - подойти к ней с другой стороны и решить ее другим способом. Но тем не менее - моя модель - она вполне может быть вероятна. Нет?
__________________
Возможно сделать все. Вопрос времени
Старый 23.12.2008, 11:26   #7  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
sukhanchik, в корреспонденции не только номерная серия - там еще и RecId во всю используется

По поводу ЖГК и ссылок таких в нем - а зачем именно там ?
Такое , IMHO, лучше делать в самих проводках ГК. Расширить одноуровневую связь "Voucher+TransDate" до многоуровневой "Voucher+TransDate" + "Код таблицы+код записи"(по документу) + "Код таблицы+код записи"(по позиции документа). В результате можно поиметь очень гибкий и детальный механизм детализации связей документов, их строк и порожденных ими модульных проводок с проводками ГК. Если эти ссылки использовать как доп. элементы группировки проводок в режиме Summary, то про недостатки этого режима можно забыть.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 23.12.2008, 14:18   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2TasmanianDevil:
Согласен - это в целом - более гибко.
ЖГК чем хорош - тем, что:
1. Можно написать функционал, который его распроведет (с удалением проводок) - чего нельзя прикрутить к LedgerTrans
2. Если на проекте есть новички - то научить их "клепать" из кода ЖГК проще, нежели - проводки. Хотя это и организационный момент - который должен решаться больше организационно.

Я не утверждаю, что ЖГК лучше - более того - я согласен - что более красиво будет реализация идеи TasmanianDevil. Просто ... исторически так складывалось - что я сталкивался больше с "клепанием" ЖГК.
__________________
Возможно сделать все. Вопрос времени
Старый 23.12.2008, 15:04   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
2mazzy: Я и не говорил о том, чтобы использовать RecId без TableId. Одно без другого не живет.
Начинается... В минусах ничего про TableID не было

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А вот как предполагается в таком случае связывать таблицы при необходимости сделать некий лог/журнал/историю в которую сыпятся данные из разных мест?
как обычно: тег + код.
делайте перечисление, каждое значение которого означает таблицу.
Используйте код таблицы.

Четко управляйте своим кодом.
Не допускайте произвольных связей в runtime...

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Или другой пример. Я хочу "наклепать" журналы ГК (складские журналы и т.д.) из некой своей надстройки. Я хочу сделать связку. Мне очень нравится идея (за вычетом моих минусов) прописать в ЖГК TableId, RecId со ссылкой на мой исходный документ. Независимо от того - какие ключи у меня в таблицах используются.
Мне это очень напоминает споры бейсиководов с паскалеводами насчет типизации.
Или споры Сишников с Сплюс-плюсистами по поводу типизации...

Да, в бэйсике можно использовать переменную под любое значение.
Но зато резко возрастает вероятность ошибки в runtime.

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Понятно - что одно из решений проблемы - подойти к ней с другой стороны и решить ее другим способом. Но тем не менее - моя модель - она вполне может быть вероятна. Нет?
Да.
Если очень нравится - делайте.
Просто надо понимать, что это заметание проблем под коврик.

Будете трахаться в отладчике
Будете трахаться с отсутствующими перекрестными ссылками (они не учитывают tableID в данных).
Будете трахаться с налаживанием связей в запросах и в отчетах вручную.
Будете трахаться с экспортом/импортом девелоперских проектов (обязательно с сохранением кода объектов)
Будете трахаться с экспортом/импортом данных (каждый обрабатываемый recID увеличивает время импорта).

Зато сэкономите десяток минут во время разработки связи и, возможно, полчаса на нумераторе.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: ZVV (1).
Старый 23.12.2008, 15:43   #10  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от mazzy Посмотреть сообщение
Зато сэкономите ... возможно, полчаса на нумераторе.
Хочу начальника, который на нумератор полчаса дает
Старый 23.12.2008, 22:09   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2mazzy. Это все увы, я знаю. И согласен - что енум+значение лучше, чем TableId+RecId. Просто в свое время небезызвестный VALU (Валера Ушаков) меня мож сказать убедил, что TableId+RecId универсальнее. Точнее сказать - пришлось поскандалить и согласиться.

Поэтому могу сказать так. Енум+номерная серия - это правильнее и оставляет за собой меньше граблей. Во всех смыслах. Но при этом поле с номерной серией нужно добавлять как идентификатор во все таблицы-источники.
Однако, имеет смысл призадуматься о TableId+RecId, если таблиц-источников много И они представляют собой стандартные таблицы. Получится много изменений в стандарте. А при обновлении приложения (подъеме на сервис-пак) - чем меньше перекрытых объектов и использующихся стандартных объектов - тем проще и быстрее обновляться.
Хочу еще раз отметить - призадуматься - не значит выбрать.
И наконец, самое главное. Любую задачу (с т.з. консультанта) можно решить по-разному с разным кол-вом доработок. Поэтому - любая "неудобная" разработка прежде,чем начаться должна быть обсуждена на предмет "а нет ли лучшего пути решения исходной задачи"?
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2).
Теги
recid, tableid, как правильно, связи

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
И снова про Relation Corsar DAX: Программирование 7 24.10.2008 14:19
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

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

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

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