Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

Документация
Работа с индексами

Работа с индексами

Типы ключей

Любые поля записи (длина которых не превышает 255 байтов) могут быть объявлены ключевыми. Ключом может быть также объявлена группа смежно расположенных полей (любого типа) - группа или часть символьного поля - подстрока. Длина группы или подстроки не должна превышать 255 байтов. Кроме того, число полей, входящих в группу не должно превышать константы MAX_SORT_ORDER.

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

Любое короткое поле может быть объявлено как имеющее NULL-значения. Для этого в описателе типа ключа поля следует установить флаг EK_NULL. NULL-значение поля является признаком того, что значение поля "не введено" (пока не имеет смысла). В частности, для уникальных ключей NULL-значения не являются дубликатами.

В СУБД HyTech 2.1 различают несколько типов ключей:

  • обычные (вторичные) ключи;
  • уникальные (первичные) ключи;
  • суррогатный ключ;
  • автоинкрементный ключ.

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

Для уникального ключевого элемента СУБД отслеживает отсутствие дубликатов значений при выполнении любых операций добавления или модификации (NULL-значения ключа могут повторяться).

Суррогатный ключ представляет собой особый случай уникального ключа. Он должен быть один для записи и таким ключом может быть объявлено только поле типа ET_DWRD. Значения суррогатного ключа можно только читать. При операциях добавления СУБД автоматически присваивает суррогатному ключу очередное уникальное значение.

При операциях модификации значение суррогатного ключа не может меняться пользователем и восстанавливается СУБД в первоначальное состояние. Суррогатный ключ не может иметь NULL-значений.

Автоинкрементный ключ также представляет собой особый случай уникального ключа. Таких ключей может быть несколько. Для получения автоинкреметного ключа следует дополнительно к флагу EK_UNIQUE установить флаг EK_AUTO. Автоинкрементным ключом может быть только цифровое целочисленное поле. При операциях добавления записей СУБД присваивает автоинкрементному ключу очередное уникальное значение.

При операциях модификации значение автоинкрементного ключа может меняться пользователем на любое уникальное значение.

Различия суррогатного и автоинкрементного ключей:

  • суррогатный ключ может быть один, автоинкрементных - несколько;
  • тип суррогатного ключа предопределен, автоинкрементный ключ может быть любого целочисленного типа;
  • суррогатный ключ не может иметь NULL-значений;
  • поддержание уникальности суррогатного ключа не требует накладных расходов по времени;
  • поддержание уникальности автоинкрементного ключа требует выполнения дополнительных поисков и увеличивает время выполнения операций добавления и модификации.

Тип ключа для элемента возвращается функцией htTableElement() в поле cKey структуры ELEMENT и может принимать одно из следующих значений:

EK_NOTKEY - элемент не ключ;

EK_COMMON - обычный ключ;

EK_UNIQUE - уникальный ключ;

EK_SURRGT - суррогатный ключ.

Кроме того, могут быть установлены флаги:

EK_NULL - ключи допускает NULL-значения;

EK_AUTO - ключ является автоинкрементным.

Эти же константы должны использоваться при описании элементов в функции создания таблицы htTableCreate().

Класс элемента также возвращается функцией htTableElement() и может принимать одно из значений:

EC_FIELD - элемент является полем;

EC_GROUP - элемент является группой;

EC_SUBSTR - элемент является подстрокой.