Среди требований, предъявляемых к СУБД, основное место занимает возможность быстрого поиска необходимой информации. Прекрасным средством, позволяющим решить эту проблему, является применение индексов, которые, в зависимости от количества полей, используемых при их создании, делятся на простые и составные.
Замечание
В отличие от многих реляционных баз данных, при определении составного индекса в Visual FoxPro можно использовать не просто список индексных полей, а индексное выражение, при формировании которого используются наименования полей таблицы.
Индексы в Visual FoxPro предназначаются также для создания первичных ключей, используемых при определении отношений между таблицами и условий целостности данных. В этом случае индексы должны быть уникальными. Это означает, что если для создания уникального индекса используется простой индекс, значения поля должны быть не повторяющимися, т. е. уникальными. Часто для создания уникального индекса используется составной индекс, т. е. он может состоять из нескольких полей. В этом случае каждое поле в отдельности может содержать повторяющиеся значения, но индексное выражение, в состав которого входят эти поля, должно быть уникальным.
Значения индексов хранятся в индексном файле, в котором для каждого значения индекса существует уникальная ссылка, указывающая на местонахождение в таблице записи, соответствующей индексу, что обеспечивает при поиске нужной информации прямой доступ к записи на основании упорядоченных значений индекса, а не последовательный просмотр всей таблицы. Это, естественно, ускоряет поиск.
Для создания индекса таблицы используется вкладка Indexes (Индексы) (рис. 4.17) окна конструктора таблиц Table Designer (Конструктор таблицы).
Все индексы в Visual FoxPro имеют имена, задаваемые в поле Name (Имя).
Слева от имени индекса в столбце Order (Упорядочение) располагается переключатель, определяющий порядок упорядочения значений индексного выражения. По умолчанию при создании индекса в данном поле появляется стрелка, направленная вверх. Это означает, что значения индексного
выражения упорядочены по возрастанию. Если стрелка направлена вниз, это говорит о том, что значения упорядочены по убыванию. Для изменения способа упорядочения можно использовать клавишу <Spacebar> или щелчок мыши.
Рис. 4.17. Вкладка Indexes конструктора таблицы, предназначенная для создания индексов
Список Туре (Тип) используется для задания типа создаваемого индекса и содержит значения, описанные в табл. 4.11.
Таблица 4.11. Описание типов индекса
Тип индекса | Описание |
Regular (Обычный) | Создается индекс, в котором для каждой записи таблицы хранится значение индексного выражения. Если несколько записей имеют одинаковое значение индексного выражения, то каждое значение хранится отдельно и содержит ссылку на связанную с ней запись |
Unique (Уникальный) | Создается индекс, в котором хранятся только неповторяющиеся значения индексного выражения. Если две или более записей содержат одинаковое значение индексного выражения, то будет храниться только одно значение и ссылка на первую из записей с одинаковым значением индексного выражения. Таблица может иметь несколько уникальных индексов |
Candidate (Кандидат) | Создается уникальный индекс, который не содержит полей с пустыми значениями. Этот индекс обладает всеми качествами первичного ключа и не является им только по той причине, что таблица не можег содержать более одного первичного ключа |
Primary (Первичный) | Создается уникальный индекс, который используется для связывания таблиц и определения условий целостности данных. Поля, входящие в первичный ключ, не должны допускать ввода пустых значений. В отличие от уникального индекса, таблица может иметь только один первичный ключ |
Значение индекса или индексного выражения вводится в поле Expression (Выражение). Вы можете ввести индексное выражение непосредственно в поле ввода или для формирования выражения использовать диалоговое окно конструктора выражений Expression Builder (Построитель выражения), представленное на рис. 4.18. Для открытия данного окна нажмите кнопку, расположенную справа от поля Expression (Выражение).
Рис. 4.18. Диалоговое окно Expression Builder
При использовании в индексном выражении полей разных типов вы должны проверять допустимость введенного выражения. Например, для таблицы Customer вы можете создать индекс, упорядочивающий данные по стране проживания и по коду клиента:
cCountry + STR(icdCustomer)
В поле Filter (Фильтр) конструктора таблиц вы можете определить фильтр, используемый для ограничения формируемых индексных значений. В этом случае результат выражения должен иметь логический тип.
Замечание
Без индексов в Visual FoxPro не обойтись. Однако при их создании вы должны помнить, что если вы используете индекс, в состав которого входят поля большой ширины, индексный файл может оказаться очень больших размеров. Visual FoxPro не разрешает при создании индексов использовать Memo-поля и поля, содержащие графические изображения.