Этот пост не будет интересен опытным разработчикам. Целевая аудитория — новички.
Содержание
- Таблица (Table4Index) создается с нуля. 2
- Измените свойство SaveDataPerCompany с Yes на No. 3
- Добавлено поле ItemId. Индекс ItemIdx создан и настроен как кластерный индекс, но SurrogateKey остался в качестве первичного ключа. 4The ItemId field is added. The ItemIdx index is created and it’a setup as clustered index, but SurrogateKey remained as a Primary key. 4
- Сделайте индекс ItemIdx первичным индексом для таблицы Table4Index. 6
- Измените свойство SaveDataPerCompany с Нет на Да. 7
- Добавьте еще одно поле — CustAccount, создайте еще один индекс — CustAccountIdx (AlloowDuplicate = No, AlternativeKey = No), добавьте поле CustAccount в индекс CustAccountIdx. 8
- Сделаем CustAccountIdx (AllowDuplicate = Yes). 9
- Поле RecId добавляется в индекс CustAccountIdx. 10
- Измените свойство для индекса CustAccountIdx с (AllowDuplicate Yes на No). 11
- Отключите оба созданных индекса (ItemIdx и CustAccountIdx). 12
1. Таблица (Table4Index) создается с нуля
Мы создадим новую таблицу, и в самом начале в ней (очевидно) нет полей
Давайте проверим, что у нас есть в SQL:
- Системные поля созданы по умолчанию: DATAATREAID, PARTITION, RECID и RECVERCION.
- Один индекс (кластерный) также создается по умолчанию и состоит из поля RECID (см. Вывод скрипта ниже)
- Также есть несколько ограничений (которые присваивают значения по умолчанию, в зависимости от типа данных поля).
Итак, в самом начале создается единственный индекс (для поля RECID), и этот индекс кластеризуется.
2. Измените свойство SaveDataPerCompany с Да на Нет
В результате удаляется поле DATAAREAID (и соответствующее ограничение), но ничего больше.
3. Добавлено поле ItemId. Индекс ItemIdx создан и настроен как кластерный индекс, но SurrogateKey остался в качестве первичного ключа.
Запустив наш скрипт, мы видим, что создан еще один индекс (для поля ItemId) и фактически он состоит из двух полей: ItemId и Partition (если свойство таблицы SaveDataPerCompany остается Да, поле DataAreaId будет добавлено в индекс ItemIdx в SQL). Также мы видим, что RecId по-прежнему является первичным индексом (см. Столбец IsPrimary), а таблица Table4Index была перестроена в соответствии с новым кластеризованным индексом (см. Столбец IndexType).
4. Сделать индекс ItemIdx основным индексом для таблицы Table4Index
5. Измените свойство SaveDataPerCompany с Нет на Да
DataAreaId добавляется в индекс ItemIdx.
6. Добавьте еще одно поле — CustAccount, создайте еще один индекс — CustAccountIdx (AlloowDuplicate = No, AlternativeKey = No), добавьте поле CustAccount в индекс CustAccountIdx
CustAccountIdx состоит из трех полей: CustAccount, DataAreaId, Partition.
7. Сделаем CustAccountIdx (AllowDuplicate = Yes)
8. Поле RecId добавляется в индекс CustAccountIdx.
Одна из самых интересных частей (с моей точки зрения) части. Я сижу несколько таблиц в готовом AX, где поле RecId добавлено в индекс, поэтому мы смоделируем ту же ситуацию:
поле RecId добавляется в индекс CustAccountIdx, но, несмотря на это (RecId всегда уникален), индекс CustAccountIdx остается NotUnique
9. Измените свойство для индекса CustAccountIdx с (AllowDuplicate Yes на No)
Итак, на мой взгляд, основная причина, по которой RecId добавлен в индекс, — это исправить какой-то пробел в модели данных. Например — вы создали индекс CustAccountIdx с одним полем, и вы решили, что этот индекс должен быть уникальным, и вы разработали некоторую функциональность, и после этого вы выясняете, что в соответствии с вашим бизнес-процессом могут быть дублированные записи. в вашей таблице с тем же CustAccount. Итак, у вас есть выбор: переписать код или просто добавить RecId в свой индекс CustAccountIdx. Может я ошибаюсь, и есть другие разумные причины для таких решений.
10. Отключить оба созданных индекса (ItemIdx и CustAccountIdx)
Оба отключенных индекса (ItemIdx и CustAccountIdx) удаляются.