Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [ 52 ] 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

\y Table Designer

Jable Name: I model

Database:

I c:\project book\aLito store dbc

Table Properties..

Table

Index

Name

TiJpe

Expression

KEY MODEL

Primary.

key model

KEYFUEL

Regular

kev fuel oil

KEYLTYRE

Regular

keiJ tiJre

KEYiBQDY

fieVlar.-

kev bodi)

KEY FIRM

ReguT

keiJ firm

Filter

Cancel

Insert

Delete

c:\project book\model.dbf

Records: 37 Fields: 20 Length:

Рис. 6.7.

Например, каждая из следующих команд делает key model первичным ключом для таблицы

Model:

ALTER TABLE Model ADD PRIMARY KEY key model TAG key mode ALTER TABLE Model ALTER COLUMN key model I PRIMARY KEY

Первичные индексы и индексы-кандидаты хранятся в структурном СDХ-файле данной таблицы, а также в базе данных, когда установлены свойства "Primary" или "Candidate". Эти типы индексов невозможно хранить ни в неструктурных СDХ-файлах, ни в IDХ-файлах. Основной причиной этого является то, что файл, содержащий индексы таких типов, должен быть всегда открытым, если открыта соответствующая таблица.

Если в индексном выражении, связанном с базой данных, используется определенная пользователем функция, то выражение обрабатывается таким же образом, как и выражения правил проверки и триггеров, содержащие определенные пользователем функции.

В Visual FoxPro уникальный индекс (Unique) не запрещает повторяющиеся значения, однако уникальный индекс запоминает в индексном файле только первое появление каждого значения.

Слово "уникальный" относится к значениям индексного файла, содержащего только уникальные значения ключей; поскольку каждое значение не запоминается более одного раза, все последующие появления какого-либо значения игнорируются. Если таблица проиндексирована уникальным индексом, то она может иметь повторяющиеся значения. Уникальный тип индексов поддерживается для обеспечения совместимости с предыдущими версиями.

Обычный индекс (Regular) индексом -кандидатом.

это индекс, который не является уникальным, первичным или

Обычные индексы используются для упорядочения и поиска записей, но не для обеспечения уникальности данных в этих записях. Обычный индекс используется также при организации



Таблица 6.3. Виды индексов Visual FoxPro

Виды Описание Количество

индекса ключей

Структурный Имя файла, Выражения со

CDX совпадает с многими

именем ключами,

таблицы; называемыми автоматически тегами открывается при открытии таблицы

Неструктурный Должен Выражения со

CDX открываться многими

явно; имеет ключами,

имя файла, называемыми

отличное от тегами имени файла таблицы

Ограничения

Максимум 240 символов на вычисляемое выражение

Максимум 240 символов на вычисляемое выражение

Простые IDX

Должен открываться явно; имя файла с расширением

.IDX

определяется пользователем

Одноключевые Максимум 100 выражения символов на вычисляемое выражение

Неструктурные СDХ-индексы применяются в тех случаях, когда требуется создать несколько индексных тегов для какой-либо специальной цели, однако нежелательна постоянная поддержка этих индексов. Например, если приложение содержит некоторый набор отчетов на основе анализа данных в полях, которые в остальное время не индексируются, то прикладная программа может создать неструктурный СDХ-индекс с необходимыми индексными тегами, запустить на выполнение эти отчеты, а затем удалить неструктурные СDХ-индексы.

Для создания неструктурного индексного тега используйте команду INDEX с параметрами TAG

и OF.

Предложение OF в команде INDEX используется для указания того, что индекс-ный тег должен быть сохранен в файле, отличном от структурного СDХ-файла данной таблицы. Например, следующая команда создает тег с именем name firm для таблицы Firm и сохраняет его в неструктурном СDХ-файле с именем NSTRFIRM.CDX:

USE Firm

INDEX ON name firm TO TAG name firm OF NSTRFIRM

Простой, или отдельный индексный файл, образуется на основе выражений с одним ключом и хранится в файле с расширением IDХ. В отличие от СDХ-индексов, которые строятся на основе выражений со многими ключами, простые IDХ-индексы сохраняют информацию только об одном ключевом выражении.

Обычно простые индексы используются в качестве временных индексов, создаваемых или реорганизуемых непосредственно перед использованием. Для каждой таблицы может быть создано сколько угодно IDХ-файлов. Некоторые программисты предпочитают использовать этот тип индекса при создании многопользовательских приложений, так как он легче поддается восстановлению в случае аварийных сбоев.

постоянных отношений типа "один ко многим" со стороны многих.

После создания индексных ключей для таблицы Model по полям key model, key firm, key fuil oil, key tyre и key body можно выводить записи в различном порядке, просто выбирая нужный индексный ключ. Команда SET ORDER используется для указания того индексного ключа, по которому будет упорядочиваться таблица.

Например, следующие команды открывают окно Browse для просмотра данных и выводят записи таблицы Model, упорядоченные по полю key model:

SET ORDER ТО key model

BROWSE

В табл. 6.3 систематизируются свойства трех видов индексов.



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

Простые индексные выражения - это индексы, построенные на основе одного поля или сложения нескольких символьных полей для формирования составного ключа. Например, можно создать индекс для таблицы Customer из базы данных Auto Store на основе выражения:

last name + first name + patronymic

Если просматривать таблицу Customer, когда она упорядочена по такому ключу, то можно убедиться, что она оказывается отсортированной по полю last name, затем по полю first name и только после этого по полю patronymic.

Вы можете создать индекс с помощью следующей команды:

INDEX ON last name + first name + patronymic TAG ; LasFirPat

Можно создавать индексы на основе более сложных индексных выражений. Индексные выражения Visual FoxPro могут содержать функции Visual FoxPro, константы или определенные пользователем функции.

Результат вычисления индексного выражения не должен превышать 100 символов для простых (IDХ) индексов и 240 символов для тегов СDХ-индексов. В одном индексном теге можно комбинировать данные различных типов, преобразовав компоненты выражения к символьному типу.

Для индексных тегов могут употребляться встроенные функции Visual FoxPro. Например, чтобы преобразовать поле типа дата в символьное выражение, можно использовать функцию DTOS(), а для преобразования числового значения в строку символов - функцию STR(). Пусть требуется создать индексный тег для таблицы Account, в котором бы комбинировались поля date write (дата выписки счета) и sum (сумма оплаты), тогда можно использовать следующее индексное выражение:

INDEX ON DTOS(date write) + STR(sum ) TAG DatSum

Вы можете расширить возможности индекса, если будете использовать в индексном выражении хранимые процедуры и определенные пользователем функции.

Если индексный тег строится для таблицы, связанной с базой данных, то предпочтительнее использовать хранимые процедуры, а не определенные пользователем функции. Поскольку определенная пользователем функция хранится в файле, отдельном от базы данных, есть вероятность, что этот файл будет перемещен или удален, а это приведет к неработоспособности индексный тег, ссылающийся на такую функцию. Хранимые же процедуры запоминаются в DBС-файле и всегда могут быть найдены Visual FoxPro.

Другим преимуществом использования хранимых процедур в индексных выражениях является то, что в индексе будет гарантировано использование в точности того кода, который указан. Если же в индексном выражении используется определенная пользователем функция, то при выполнении индексирования будет вызываться любая функция с указанным именем, оказавшаяся в области видимости Visual FoxPro.

Использование хранимых процедур или определенных пользователем функций следует тщательно продумывать, поскольку это увеличивает время создания индекса.

Вы можете просматривать записи по убыванию ключа, создав индекс с убывающими ключами или рассматривая обычный индекс в обратном порядке.

Как создать убывающий индекс? На вкладке Index Конструктора таблиц нажмите кнопку со стрелкой слева от поля Name так, чтобы стрелка на кнопке указала вниз, или используйте предложение DESCENDING в команде INDEX ON.

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

USE Account

INDEX ON sum TAG sum DESCENDING BROWSE



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [ 52 ] 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146