Описание индексов таблицы. Атрибуты индексов Назад В начало Вперед

Для описания индексов зарезервирована ключевая конструкция with index, после которой в круглых скобках через запятую перечисляются индексы таблицы. Индекс может иметь имя, уникальное для данной БД.Конструкция закрывается точкой с запятой.

<описание-индексов-таблицы> =
	with index (<описание-индекса> {, <описание-индекса>});

Необходимо описать все используемые индексы таблицы.

<описание-индекса> = [<имя-индекса> =]
	<сегмент-индекса> {, <сегмент-индекса>};

Описание индекса состоит из сегментов. Сегменты индекса разделяются запятой.

<имя-индекса> - идентификатор. Должен быть уникальным для данной БД.

<сегмент-индекса> = <имя-поля>
	[([seg] <атрибут-индекса> {, <атрибут-индекса>})]

<имя-поля> - идентификатор.

Оператор seg указывает на то, что следующее в описании индексов поле также является сегментом данного индекса.

<атрибут-индекса> = <атрибут-модификации> | <атрибут-уникальности>
	| <атрибут-регистров> | <атрибут-сортировки>
	| <атрибут-вхождения-нулевой-записи> | <длина-сегмента>
	| <смещение-сегмента> | <атрибут-счетчика-записей>
	| <атрибут-суррогатного-ключа> | <атрибут-журналирования>

Атрибуты индекса задают дополнительные условия.

<атрибут-модификации> = mod | nomod

mod (m) - модификация ключа разрешена.

nomod (nm) - модификация ключа запрещена. В режиме nomod модификация полей сегментов ключа запрещена, при этом вставка и удаление записей разрешаются.

Для составного ключа значение атрибута определяется по первому сегменту и дальнейшее изменение атрибута в пределах данного ключа воспринимается как ошибка.

Значение атрибута по умолчанию mod.

<атрибут-уникальности> = duplicates | unique

duplicates (d) - уникальность ключа не контролируется, т.е. ключ может иметь одинаковые значения для разных записей таблицы.

unique (un) - контролируется уникальность ключа.

Для составного ключа значение атрибута определяется по первому сегменту и дальнейшее изменение в пределах одного ключа воспринимается как ошибка.

Значение по умолчанию duplicates.

<атрибут-регистров> = upcase | noupcase

upcase (up) - игнорировать регистр букв.

noupcase (nup) - различать регистр букв.

Атрибут определяется для каждого сегмента ключа.

Значение по умолчанию upcase.

<атрибут-сортировки> = asc | desc

asc - сортировка записей в порядке возрастания значения поля для данного сегмента индекса.

desc - обратный порядок сортировки.

Атрибут сортировки определяется для каждого сегмента.

Для составного ключа сортировка записей производится по полю и атрибуту первого сегмента ключа. Если поле первого сегмента не является уникальным, то есть существуют записи, имеющие одинаковые значения в поле первого сегмента, то сортировка подобных записей производится по полю и атрибуту второго сегмента ключа и т.д. Таким образом, для сортировки записей имеет значение порядок перечисления сегментов индекса. Значение по умолчанию asc.

Например, пусть имеется таблица, в которой есть шесть записей. Предположим, один из индексов таблицы описан следующим образом:

a (seg, asc), b (asc)

Если открыть таблицу по этому индексу, то записи будут отсортированы в таком порядке:

1

1

1

2

2

1

2

2

3

1

3

2

Предположим, индекс описан иначе:

a (seg, asc), b (desc)

Записи будут отсортированы в следующем порядке:

1

2

1

1

2

2

2

1

3

2

3

1

<атрибут-вхождения-нулевой-записи> = null

null (n) - если для данной записи все сегменты индекса имеют нулевые значения, запись не индексируется. В таблицу эта запись попадает на общих основаниях. Таким образом при просмотре таблицы по данному индексу эта запись не будет видна. В то же время она может быть видна при просмотре таблицы по другому индексу.

Для составного ключа значение атрибута определяется по первому сегменту и дальнейшее изменение в пределах одного ключа воспринимается как ошибка.

Значение по умолчанию null.

<длина-сегмента> = length = <целое-число>

Атрибут length (l) устанавливает значимую длину сегмента ключа, равную целому числу без знака.

Длина сегмента задается для каждого сегмента индекса отдельно. Начало сегмента совпадает с началом поля, если не задано смещение сегмента (см. ниже в данном разделе).

Используется для полей типа string и char.

По умолчанию длина сегмента приравнивается к длине поля.

<смещение-сегмента> = offset = <целое-число>

Атрибут offset задает позицию, начиная с которой значение поля воспринимается как значение сегмента.

Смещение сегмента задается для каждого сегмента индекса отдельно.

По умолчанию смещение сегмента считается равным нулю.

Используется для полей типа string и char.

Если смещение сегмента больше 1, то тип сегмента ключа устанавливается char, иначе тип сегмента ключа соответствует типу поля сегмента.

<атрибут-счетчика-записей> = autoinc

Атрибут autoinc (a) устанавливается на поля, которые Вы хотите использовать для подсчета количества вставленных записей. СУБД Атлантис поддерживает автоматическое увеличение значения соответствующего поля на единицу в ходе операции insert.

Таблица может иметь только одно поле с атрибутом autoinc.

Атрибут autoinc используется только для уникальных несегментированных индексов на поля типа longInt.

Для полей с атрибутом autoinc автоматически устанавливается атрибут уникальности unique.

<атрибут-суррогатного-ключа> = surrogate

surrogate (s) - атрибут используется только для уникальных несегментированных индексов на поля типа comp.

СУБД Атлантис поддерживает автоматическое увеличение значения суррогатного поля на единицу в ходе операции insert. Суррогатное поле (ключ) постоянно возрастает в диапазоне текущего офиса, который задан в таблице журнальной конфигурации X$JournalConfig.

Для суррогатного ключа автоматически ставится атрибут уникальности unique.

Недопустимо менять в прикладном коде значения полей, имеющих атрибут surrogate. В противном случае возможны нежелательные эффекты. В частности, такие изменения не журналируются и не участвуют в репликации баз данных (в межофисном обмене). Возможны и другие, непредсказуемые последствия.

<атрибут-журналирования> = journal

Атрибут journal (j) указывает на поле, значение которого будет заноситься в таблицу журнала изменений X$Journal в качестве идентификатора измененной /добавленной /удаленной записи. Идентификатор записи NRec.

Атрибут journal используется только для уникальных несегментированных индексов на поля целочисленного типа.

Для полей с атрибутом journal автоматически устанавливается атрибут уникальности unique.

Таблица может иметь только одно поле с атрибутом journal. Если атрибут не задан, таблица не может журналироваться.

Рекомендуется использовать атрибут journal для полей, имеющих атрибут surrogate (см. выше в данном разделе).