|  08.09.2014, 19:36 | #1 | 
| Участник | Зачем указывать replacementKey, если сразу можно primary заменить на нужный alternateKey? 
			
			Если в уникальном ключе одно поле и AlternateKey = true, то его можно указать как PrimaryKey. Вопрос - почему так не делается в стандарте?  Например, в стандартной таблице UnitOfMeasure, можно было бы сразу указать PrimaryKey = SymbolIdx. Но зачем-то Primary оставлен суррогатным, а replacementKey =SymbolIdx. (лукапы все норм работают ? и unitOfWork тоже, если заменить primary на один из alternate) Последний раз редактировалось kitty; 08.09.2014 в 19:56. | 
|  | 
|  08.09.2014, 22:17 | #2 | 
| Участник | 
			
			Работать то оно будет, но с той же ли производительностью? Суррогатный ключ может иметь преимущество не только над составным но и над ключом из одного поля, если оно к примеру строковое, а не целочисленное    | 
|  | 
|  09.09.2014, 12:35 | #3 | 
| Участник | 
			
			Так как ключи в аксапте по определению подразумевают создание индексов на уровне субд, то в этой ситуации получаем, что оба индекса все равно существуют в таблице,просто один из них указан как первичный ключ. Поэтому совсем не понимаю, как улучшится производительность, если я суррогатный укажу, как первичный, а не SymbolIdx?
		 Последний раз редактировалось kitty; 09.09.2014 в 12:38. | 
|  | 
|  09.09.2014, 12:56 | #4 | 
| Участник | 
			
			А вторичные ключи в сотне подчинённых таблиц? Будут они строковыми либо целочисленными, есть разница?  По поводу строк ещё сразу всплывает проблема с поддержкой мультиязычности. В конце концов архитектурно красивая абстракция получается. Не смешиваются ссылка на данные и сами данные. | 
|  | 
|  09.09.2014, 13:25 | #5 | 
| Участник | 
			
			Я так понимаю, речь идет об Ax2012. В "теории" альтернативный и первичные ключи имеют разную область применения. Первичный ключ - это ключ, используемый для связки PK-FK. Т.е. ключ, обеспечивающий ссылочную целостность данных. Внутри самой базы данных. Как правило, на формах не отображается и пользователь его не видит. Альтернативный ключ - это ключ, используемый для идентификации записи пользователем. Т.е. для поиска в различных формах и lookup. Как правило, первичный ключ формируется автоматически и не несет в себе никакого "физического" смысла, понятного пользователю. Его можно только запомнить. Никаких ассоциаций у пользователя он не вызывает. А вот альтернативный ключ, с точки зрения пользователя, имеет некий "физический" смысл. Всегда можно сделать предположение о том, что же он в себе содержит по его "физическому" смыслу Альтернативный ключ, как правило, значительно больше по размеру (в байтах), чем первичный ключ. Поскольку для связи с другими таблицами его значение надо записать как FK в этих самых "других" таблицах, то размер имеет существенное значение. Кроме того, после создания записи, изменение первичного ключа крайне не приветствуется. А вот альтернативный ключ - это обычное поле справочника. Можно спокойно изменить в любой момент, как и любое другое поле справочника. Да, разумеется, иногда размер альтернативного ключа может быть меньше размера первичного ключа. Но обычно это исключения. И в таких случаях следует все оставить "по стандарту". "Пусть безобразно, зато единообразно" (с)  Но! Это все "теория". На практике, по крайней мере в Ax2009, PrimaryIndex использовался именно как альтернативный. В Ax2009 связка PK-FK на уровне базы данных не поддерживалась. Не знаю, изменилось ли что-нибудь в Ax2012. На уровне базы данных Primary Key создается? 
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2). | |
|  09.09.2014, 13:33 | #6 | 
| Участник | 
			
			Суррогатный ключ это индекс по RecId. если на форму выводится ссылка на суррогатный ключ(RecId), если он первичный, то на форме отображается поле входящее в ReplacementKey. и вводить значение в него можно именно из значений ReplacementKey, такая же связь работает в Excel AddIns ПС в этом кроется засада: ядро системы формирует запрос к таблице на которую дана ссылка для отображения поля из ReplacementKey, если таких ссылок много то возникают проблемы с производительностью на форме Последний раз редактировалось ice; 09.09.2014 в 13:43. | 
|  | 
|  09.09.2014, 13:33 | #7 | 
| Участник | 
			
			Я согласна со всеми пунктами, и концептуально правильно указывать суррогат как pk, раз уж он fk в других таблицах.  У нас тут немного кавардак, и где как указаны индексы, вот думаю, нужно ли все менять или лучше оставить как есть, раз уже работает. Поэтому возникают вопросы: Чего я не понимаю: 1) Что перестанет работать, если я просто укажу SymbolIdx в качестве первичного? 2) Если связи не по суррогатному ключу, а по другому полю, то можно ли оставлять превичным суррогат? 3) Есть ли случаи, когда все связи построены по суррогатному ключу, но нужно указывать другой уникальный ключ в качестве первичного? Я пока поэкспериментировала и кроме как логического смысла, в поведении системы разницы не вижу в зависимости от того, суррогат первиченным указан или другой уник индекс. | 
|  | 
|  09.09.2014, 15:11 | #8 | 
| Участник | Цитата: Цитата: Цитата: | 
|  | 
|  09.09.2014, 16:06 | #9 | 
| Участник | Цитата: Специально сейчас на unitOfMeasure поставила PrimaryKey = SymbolIdx, и проверила - лукапы в ссылающихся таблицах норм работают, тк связь как была по recId, так она и осталась и используется. Тут еще узанала, что, если оставить primaryKey суррогатным и если воспользоваться переименованием первичного ключа в контекстном меню, то будет для переименования выдаваться recId, а не уник поле, кот имеет смысл переименовывать для пользователя. Попробовала на бедном unitOfMeasure - действительно, если primary - recId, то для переимования предлагается recid, если заменить на symbolIdx, то можно переименовать саму единицу измерения. Это так и задумано??? Как же тогда, действительно, переименовывать? | 
|  | 
|  09.09.2014, 17:47 | #10 | 
| Участник | 
			
			А что вам не нравится? Если ключом является RecId, то переименование ключа - это замена одного значения RecId на другое. По моему, все логично. Понадобиться такое может разве что при объединении строк (merge).  Что значит действительно переименовать? Для того чтобы изменить не ключ а сами данные никаких хитрых инструментов не нужно. | 
|  | |
| За это сообщение автора поблагодарили: kitty (1). | |
|  09.09.2014, 18:48 | #11 | 
| Участник | 
			
			Спасибо, S.Kuskov. Вы правы, конечно, это так.
		 | 
|  | 
|  | 
| 
 |