17.10.2005, 15:26 | #1 |
Участник
|
Code&ID
С чем связанно что в аксапте принято ссылаться по коду а не ID записи?
|
|
17.10.2005, 15:37 | #2 |
Модератор
|
ID записи может и поменяться, допустим, при экспорте-импорте справочника. И вообще, ссылаться на служебную переменную, идентифицирующую запись - это ОЧЕНЬ ПЛОХОЙ ТОН!
В Аксе есть места, где есть связка по RecId, многие от этого страдают. Не делайте так. С Уважением, Георгий |
|
17.10.2005, 15:44 | #3 |
Участник
|
Посмотрите на EDT и его узел Relations - с помощью этого механизма обеспечивается логическая связь м-ду таблицами (а так же Relations на самих таблицах)
__________________
Axapta v.3.0 sp5 kr2 |
|
17.10.2005, 15:52 | #4 |
Участник
|
Я не правильно сформулировал вопрос. Я хотел узнать почему вообще разработчики Аксапты решили делать ссылки по коду а не например по автоинкрементному ID или что нибудь в этом стиле. Я понимаю что это вопрос больше к разработчикам но все же
|
|
17.10.2005, 15:56 | #5 |
Участник
|
В Axapta'е используется концепция естественных ключей, т.е. по самому ключу можно определить характер записи. По-этому и применяются символьные поля в качестве ключевых
__________________
Axapta v.3.0 sp5 kr2 |
|
17.10.2005, 16:15 | #6 |
NavAx
|
Импорт/экспорт данных гораздо удобнее становится. Есть вероятность, что в другой системе id окажется не числовым, и тогда загрузка связанных таблиц может превратиться в достаточно сложный процесс. Кроме того, есть такая удобная вещь, как "переход к основной таблице"
__________________
Isn't it nice when things just work? |
|
17.10.2005, 16:15 | #7 |
Модератор
|
Цитата:
Сообщение от vavkin
Я не правильно сформулировал вопрос. Я хотел узнать почему вообще разработчики Аксапты решили делать ссылки по коду а не например по автоинкрементному ID или что нибудь в этом стиле. Я понимаю что это вопрос больше к разработчикам но все же
Кстати, этот вопрос очень часть встречается от людей, которые приходят на Axapta с 1С. 1С ники из-за ссылочных таблиц, кроме всего прочего, хлебнули и с производительностью С Уважением, Георгий |
|
17.10.2005, 16:18 | #8 |
NavAx
|
Вообщем можно резюмировать следующим образом:
RecId следует использовать только совместно с TableId
__________________
Isn't it nice when things just work? |
|
17.10.2005, 16:19 | #9 |
Участник
|
Цитата:
Сообщение от AndyD
В Axapta'е используется концепция естественных ключей, т.е. по самому ключу можно определить характер записи. По-этому и применяются символьные поля в качестве ключевых
|
|
17.10.2005, 16:26 | #10 |
Участник
|
Цитата:
Сообщение от macklakov
Импорт/экспорт данных гораздо удобнее становится. Есть вероятность, что в другой системе id окажется не числовым, и тогда загрузка связанных таблиц может превратиться в достаточно сложный процесс. Кроме того, есть такая удобная вещь, как "переход к основной таблице"
|
|
17.10.2005, 16:30 | #11 |
Участник
|
Тема рассмотрена в
Естественные ключи против исскуственных ключей, Синтетические и естественные ключи. [обсуждение темы БП] . Оба подхода имеют своих сторонников. Лично мне ближе прозрачное использование СК - абстрагирует механизм идентификации записей. |
|
17.10.2005, 16:33 | #12 |
NavAx
|
Цитата:
Сообщение от vavkin
ERP система могла бы получить join'ом или вложенным запросом
Для эксперимента попробуйте добавить хотя бы одно подобное поле. Засеките время которое потратите. Сравните быстродействие ;-) Цитата:
Сообщение от vavkin
Превратиться в сложный процесс в плане написания модификации или в плане производительности?
P.S. Кстати, проблемы с быстродействием возникают вовсе не из-за текстовых ключей ;-)
__________________
Isn't it nice when things just work? Последний раз редактировалось macklakov; 17.10.2005 в 16:39. |
|
17.10.2005, 16:33 | #13 |
Участник
|
Цитата:
Сообщение от George Nordic
Хм. А при переносе данных Вы сможете таким механизмом гарантировать целостность данных?
И вообще почему бы не использовать uniqueidentifier (GUID) |
|
17.10.2005, 16:35 | #14 |
Участник
|
Ну, во-первых, из названия поля видно только к какой таблице оно относится (да и то не факт), но не видно, что это за клиент или договор. Цифровой абстрактрый код здесь мало поможет
Во-вторых, из одного столбца разные записи одной и той-же таблицы могут ссылаться на разные связанные таблицы (как пример - поле Кор.счет в журналах Главной книги)
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 17.10.2005 в 16:37. |
|
17.10.2005, 16:43 | #15 |
Участник
|
Цитата:
Сообщение от macklakov
Пример: Форма Заказ, в ней указаны Клиент, Счет На, Валюта, Аналитика и еще десяток параметров. Все они допускают фильтрацию, сортировку и т.д. Представляете, во что превратится эта задача, если для получения этих значений будет использоваться join? Кроме того, усложняется механизм добавления записей/редактирования.
Для эксперимента попробуйте добавить хотя бы одно подобное поле. Засеките время которое потратите. Сравните быстродействие ;-) |
|
17.10.2005, 16:44 | #16 |
Модератор
|
Цитата:
Сообщение от vavkin
Если имеется ввиду объединение баз то int могут совпасть ровно с таким же успехом как и Code. И у Code здесь нет преимуществ.
И вообще почему бы не использовать uniqueidentifier (GUID) -Упрощение сопровождения -Уменьшение размера БД -Увеличение скорости выборки данных -Увеличение скорости обновления данных -В системе с ЕК меньше JOIN`ов, следовательно, запросы проще и разработка удобнее -Введение СК нарушает третью нормальную форму -Таблицы в системе с ЕК информативнее Если есть контрпримереры - давай поспорим. Действительно, есть спорные моменты. Ведь, как я понимаю, это чисто теоритический спор? Или Вы планируете использоватть GUIN в качестве ключа при разработке собственных таблиц? Лично мне нравится в виде ключа видеть "МИ-АКС-НОГ(40) 100х20", чем 123579 или 1657-AB10-C548F-4564-BD20 С Уважением, Георгий. |
|
17.10.2005, 16:47 | #17 |
Administrator
|
Вообще сравнение архитектур баз данных с "естественными" ключами и "искусственными" - это вопрос большой полемики - это как Windows и Linux, Delphi/Basic/C++ и т.д. Каждый подход имеет свои преимущества и недостатки. У "естественных" ключей преимущество в первую очередь в простоте программирования. Ведь все-таки изначально - Axapta не среда разработки а ERP-система. Ведь достаточно в табличку напихать 3 поля - напр CustAccount, RContractAccount, RContractCode - и уже это будет осмысленная информация, от которой можно будет перейти к справочникам через основную таблицу. И к форме будет прилеплена только одна табличка. В "искусственных" ключах - для получения подобного эффекта - нужно будет прилепить 3 таблички к форме (тк в главной табличке будут только некие бессмысленные числовые коды). И сразу встает вопрос - что лучше - открыть форму и при открытии лезть в 3 таблички (чтобы имена получить), либо сделать 3 ключа текстовыми. С точки зрения пользователя - информация нагляднее выглядит когда используются "естественные" ключи. А производительность можно увеличить мощностью сервера.
В этом случае разработчики и предпочли одно из решений. 1С - выбрала другое решение. Каждая система заняла свою нишу.
__________________
Возможно сделать все. Вопрос времени |
|
17.10.2005, 16:57 | #18 |
Участник
|
Цитата:
Сообщение от sukhanchik
В этом случае разработчики и предпочли одно из решений. 1С - выбрала другое решение. Каждая система заняла свою нишу.
|
|
17.10.2005, 17:12 | #19 |
Модератор
|
Цитата:
Сообщение от vavkin
Я сомневаюсь что они заняли разные ниши именно из за выбора типа ключей.
С Уважением, Георгий |
|
17.10.2005, 17:28 | #20 |
Участник
|
Цитата:
Сообщение от George Nordic
-Упрощение сопровождения
-Уменьшение размера БД -Увеличение скорости выборки данных -Увеличение скорости обновления данных -В системе с ЕК меньше JOIN`ов, следовательно, запросы проще и разработка удобнее -Введение СК нарушает третью нормальную форму -Таблицы в системе с ЕК информативнее Если есть контрпримереры - давай поспорим. Действительно, есть спорные моменты. Ведь, как я понимаю, это чисто теоритический спор? Или Вы планируете использоватть GUIN в качестве ключа при разработке собственных таблиц? Лично мне нравится в виде ключа видеть "МИ-АКС-НОГ(40) 100х20", чем 123579 или 1657-AB10-C548F-4564-BD20 Теперь по пунктам. "Упрощение сопровождения" - не вижу никаких преимуществ одного перед другим. "Уменьшение размера БД" - за счет чего она уменьшится? если использовать int то при code размер будет больше, если GUID который 16 символов то тоже меньше чем если Code который 20, я могу ошибиться в кол-ве символов, да на самом деле не так уж это важно, будет на 2 % больше размер или меньше. У этого пункта нет преимуществ, точнее по этому пункту Code проигрывает "Увеличение скорости выборки данных" за счет чего? При выводе связанной информации int по крайней мере не медленнее чем Code и я сильно сомневаюсь что GUID медленне чем Code. По этому пункту Code выигрывает только в том случае если он сам по себе достаточен и не нужен join, как только появляется связь (а она появится) то Code не выигрвает а скорее проигрывает. "Увеличение скорости обновления данных" честно говоря вообще не понятно за счет чего, можно поподробнее? "В системе с ЕК меньше JOIN`ов, следовательно, запросы проще и разработка удобнее" проще только разработка форм и то в том случае когда опять же коды самодостаточны. При разработке модификации как таковой вообще не вижу преимуществ у Code, ведь значения кодов не сипользуются в тексте модификации и значит мне как программеру все равно что там в нем ID или Code. В системе с ЕК меньше join'ов только при выводе формы, в отчетах все равно надо связываться со связынными таблицами. "Введение СК нарушает третью нормальную форму" каким образом? "Таблицы в системе с ЕК информативнее" они информативнее только в том случае если их смотреть через Enterprise manager, но как правило их смотрят через систему и система могла бы сама выполнить автоматически join и тогда пользователю становится все равно как хранятся данные внутри. "Или Вы планируете использоватть GUIN в качестве ключа при разработке собственных таблиц?" По крайней мере вижу причин не использовать их "Лично мне нравится в виде ключа видеть "МИ-АКС-НОГ(40) 100х20", чем 123579 или 1657-AB10-C548F-4564-BD20" это относится к информативности и я уже высказался выше. |
|
Теги |
renameprimarykey, естественный ключ, искусственный ключ |
|
|