Информационное обеспечение систем управления





НазваниеИнформационное обеспечение систем управления
страница16/19
Дата публикации05.12.2014
Размер3.02 Mb.
ТипРеферат
100-bal.ru > Информатика > Реферат
1   ...   11   12   13   14   15   16   17   18   19
n1[, n2]])   возвращает символьный эквивалент заданного числового выражения. Параметр Выр.N задает числовое выражение, обрабатываемое функцией STR.

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

Параметр n2 задает число десятичных знаков в символьной строке, возвращаемой функцией STR. Чтобы задать это число, необходимо указать аргумент n1.

Если мы хотим иметь в экспериментальном файле числовое поле типа N8.2, то значения для этого поля можно получать из выражения 100000*RAND(). А для символьного поля типа С8 соответствующее выражение будет иметь вид – STR(100000*RAND(),10,2).

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

7.4. Индексирование DBF-файлов

Технология индексирования имеет в АИС несколько приложений.

Во-первых, не один разработчик АИС не будет заставлять пользователя вводить записи в заданном порядке. Покупатели никогда не приходили в алфавитном порядке и никогда не выписывали товары точно по возрастанию их кодов. В систему записи поступают в случайном порядке, но, тем не менее, мы хотим обычно просматривать DBF-файлы в отсортированном по одному или нескольким полям виде.

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

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

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

Упорядочить записи в DBF-файле можно двумя способами: физически расположить их в нужном порядке или создать для данного DBF-файла индекс.

Для изменения физического порядка следования записей в DBF-файле используется команда SORT. Она воздействует на текущий DBF-файл и создаёт новый файл, отсортированный по одному или по комбинации нескольких полей. Например, следующая команда:
SORT TO baza1 ON fio
создаёт новый файл с именем baza1, отсортированный по полю fio. Этот файл создаётся на основе текущего DBF-файла.

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

Индексирование DBF-файлов – это более гибкий способ упорядочения в них записей. Упорядочение записей, дихотомный поиск и другие операции, требующие наличие индексирования, в реляционных базах данных реализуется посредством индексных файлов. В VFP они имеют расширение IDX или CDX.

Если файл DBF-файл проиндексирован, то команды BROWSЕ, EDIT, REPLACE, SKIP и все другие команды, связанные с движение указателя, перемещают указатель записей в соответствии с индексом, а не с физическим порядком расположения записей. Так команда GO TOP устанавливает указатель записи не на первую физическую запись, а на начальную запись индекса. В частном случае физическая запись и запись индекса могут совпадать.

Понятие индекса хорошо иллюстрируется аналогией с использованием алфавитного каталога в библиотечном деле. В каталоге приводятся библиографические данные по книгам в лексикографическом порядке фамилий их авторов. Физическое же хранение книг (расположение книг в хранилище на полках) совсем другое, оно определяется каталожным номером. Так и здесь, физически записи в DBF-файлах располагаются на диске, как правило, в порядке их создания. В индексном же файле задаётся своеобразный “каталог”, каждый элемент которого есть пара. Первая компонента пары содержит упорядоченное (по возрастанию или убыванию) значение ключевого поля, вторая   значение указателя записи. Последняя компонента указывает на место физического хранения той записи, в которой ключевое поле равно значению первой компоненты.

Второй характерный пример – это предметный указатель в конце монографии или учебного пособия. В нем в алфавитном порядке располагаются термины монографии. Каждый термин имеет ссылку на страницу, на которой этот термин используется или определяется. Имеет место следующая аналогия понятий: предметный указатель – индекс; список терминов – ключевое поле; фиксированный термин – значение ключевого поля; указатель на страницу – указатель записи.

Один DBF-файл может быть проиндексирован по нескольким полям, т.е. иметь несколько индексных файлов. Такие файлы содержат информацию о расположении записей файла, например, в лексикографическом или алфавитном (символьные поля); хронологическом (поля типа даты) или в числовом порядке для того поля, по которому выполнено индексирование. Допускается индексирование по логическим полям. Например, рассмотрим условно содержание индексного файла для заданного DBF-файла:

Rec

TABN

FIO







Индексирование по первичному ключу TABN




Индексирование по вторичному ключу FIO

1

150

Иванов







2

110

Петров







3

112

Сидоров




Rec

TABN




Rec

FIO

4

101

Лелянов




4

101




7

Андреев

5

108

Шалобанов




5

108




1

Иванов

6

140

Храмов




2

110




4

Лелянов

7

145

Андреев




3

112




2

Петров













6

140




3

Сидоров













7

145




5

Шалобанов













1

150




6

Храмов


В принципе без индексирования можно обойтись, используя последовательный поиск, но для реальных баз данных получить приемлемые скоростные характеристики можно только индексированием. Однако за скорость нужно платить. Сами индексные файлы занимают некоторое место на диске, их объём ориентировочно оценивается пространством, занимаемым полем базы данных, по которому выполнено индексирование. Так если проиндексировать DBF-файл по всем полям, то суммарный объём IDX-файлов будет близок к объёму исходного DBF-файла. Кроме того, замедляются операции ввода/редактирования, так как при дополнении новой записи индексный файл автоматически перестраивается в соответствии с новыми или изменёнными данными.

Классификационная схема индексов в FoxPro приведена рис. 7.5. В этой СУБД можно создавать два типа индексных файлов.

Рис. 7.5. Классификация индексов в СУБД VFP





1. Обычный индексный файл с расширением IDX, который содержит один индекс (одноиндексный файл).

2. Многоиндексный файл с расширением CDX, который может хранить сразу несколько индексов и является по существу соединением нескольких одноиндексных файлов. Каждый отдельный ключ в таком файле называют “тегом”. Каждый тег имеет уникальное имя в пределах файла.

Многоиндексные файлы бывают двух видов: структурный многоиндексный файл с именем, совпадающим с именем DBF-файла; обычный многоиндексный файл с произвольным именем.

Структурный файл всегда автоматически открывается вместе со своим DBF-файлом. Его нельзя закрыть, хотя можно сделать неглавным. Использование многоиндексных файлов предпочтительнее (меньше одновременно открытых файлов, быстрее доступ к файлам, легче контролировать файловую среду). IDX-файлы могут храниться в двух форматах – обычном и компактном. Все CDX-файлы имеют компактный формат.

Создать индекс можно двумя способами:

- в среде операционной оболочки VFP (Файл/Создать/Индекс; для простого индекса при создании структуры файла DBF-файла использовать опцию “Тег”; в конструкторе таблиц можно создать только структурный CDX-файл)

- из командного окна или командного файла.

Индексирование DBF-файла выполняется командой:

INDEX ON <выр> TO / TAG <имя тега>

[OF ] [FOR <условие>]

[COMPACT] [DESCENDING] [UNIQUE] [ADDITIVE].

Здесь <выр>   индексное выражение. Его длина ограничивается 100 символами для IDX-файлов и 254 –CDX-файлов. Обычно индексное выражение (ключ) – это имя поля, по которому нужно упорядочить DBF-файл. Ключ может быть составным, т.е. состоять из нескольких полей; из полей, переменных и функций, в том числе функцией пользователя. Например, выражение
STR(pol1,2) + STR (pol2,3) + STR(pol3,5) + pol4
определяет ключ как символьную цепочку, в которой первые два символа взяты из числового поля pol1, три символа – из pol2, пять символов – из pol3 и плюс значение символьного поля pol4. Если это выражение мы определим как функцию пользователя:

FUNCTION INDC()

PI = STR(pol1,2) + STR(pol2,3) + STR(pol3, 5) + pol4

RETURN PI,

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

USE BAZA

INDEX ON INDC() TO ICBAZA.

Такой индекс упорядочивает файл в алфавитном порядке, используя информацию из нескольких полей. Функция STR() – преобразует числовое выражение в символьную строку.

Фрагмент TO <IDX–файл> задаёт имя одноиндексному файлу. Следующая часть   TAG <имя тега> [OF <CDX – файл>]   задаёт имя тега в многоиндексном файле. Если отсутствует ключевое слово OF, то создаётся структурный многоиндексный файл, если оно присутствует – то многоиндексный файл получает имя <CDX–файла>. Команда может использоваться как для создания нового многоиндексного файла, так и для дополнения уже существующего CDX–файла новым тегом.

Фрагмент FOR <условие> устанавливает режим отбора в индекс только тех записей, которые отвечают заданному <условию>. В условии возможна функция пользователя. Наличие FOR <условие> задаёт фильтр, который делает доступ к записям исключительно быстрым.

Фраза COMPACT в FoxPro версии 2.0 и выше позволяет создавать индексные файлы двух форматов: компактный и обычный. Обычный формат используется для совместимости с предыдущими версиями. Все CDX–файлы создаются в компактном формате. Если не указано ключевое слово COMPACT, то IDX–файл строится в обычном формате. Компактный формат более предпочтителен и по критерию памяти и по критерию быстродействия.

Опция DESCENDING задает порядок индексирования по убыванию. Режим можно указывать только для CDX–файлов. По умолчанию и для IDX–файлов индексирование выполнится по возрастанию.

Опция UNIQUE означает, что, если в базе встречаются записи с одинаковым значением ключа, все такие записи, кроме первой, игнорируются (не включаются в индекс). Этим процессом можно также управлять с помощью команды SET UNIQUE.

Фраза ADDITIVE определяет такой режим, что вновь создаваемые индексные файлы не закроют уже открытые к тому моменту индексные файлы. По умолчанию открытые ранее файлы, за исключением структурного файла, закрываются.

Рассмотрим пример. Пусть существует DBF-файл BAZA со структурой

N3 C20 C1 C12

TABN

FAM

POL

DOL

Приведем фрагмент его заполнения данными


1

Лелянов Б.Н.

М




2

Шевченко В.П.

Ж




3

Шалобанов С.В.

М




4

Воронин В.В.

М




5

Корнеева Н.И.

Ж




6

Храмов В.А.

М




7

Епанешников В.Д.

М

















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

USE BAZA

INDEX ON FAM TO IBAZA

LIST FAM
приведет к выдаче на экран такого результата:

Record

FAM

4

Воронин В.В.

7

Епанешников В.Д.

5

Корнеева Н.И.

1

Лелянов Б.Н.

3

Шалобанов С.В.

2

Шевченко В.П.

6

Храмов В.А.


При этом физическое расположение записей не изменилось. В рабочей области есть открытый (остался открытым после создания) индексный файл IBAZA.IDX, в соответствии с которым команда LIST выдаёт значение поля FAM.

Каково содержимое индексного файла? В СУБД не предусмотрен непосредственный доступ к индексному файлу, хотя командой MODIFY FILE можно увидеть, что индексный файл, кроме технической информации содержит значения ключа, расположенные в порядке возрастания. В нашем примере эта команда выдаст следующий результат:

4 – Воронин, 7 – Епанешников, 5 – Корнеева и т.д.

Другая последовательность команд

INDEX ON FAM TO IBAZA FOR POL=“M”

LIST FAM, РOL
приведет к выдаче на экран следующего результата


4

Воронин В.В.

М




7

Епанешников В.Д.

М




1

Лелянов Б.Н.

М




3

Шалобанов С.В.

М




6

Храмов В.А.

М





Приведем еще один пример сложного индексного выражения для файла

POST .DBF

N5 N5 D N8.2

KODP

KODT

DATA

KOL


Первичным ключом для этого DBF-файла будет три поля KODP, KODT и DATA, которые однозначно определяют отдельную поставку товаров. Для идентификации поставки с использованием индексации мы должны создать сложный индекс на основе, например, следующего индексного выражения:

str(KODP) + str(KODT) + DTOC(DATA, 8)
последняя функция преобразует дату в символьную строку.

Нельзя создавать простые индексы по полям Memo и General и включать эти поля в индексные выражения (а логические поля?). Количество одновременно открытых и доступных индексных файлов ограничено числом 21 (FoxPro 2.0). Только один индекс является главным (текущим), VFP имеет команды для управления индексными файлами.

В заключении подраздела сформулируем несколько полезных советов.

1. Если в DBF-файле сделали изменения в индексных полях при закрытом индексном файле, то в дальнейшем для правильной работы с индексным файлом, его необходимо переиндексировать командой REINDEX.

2. Метка о том, что DBF-файл имеет структурный индекс, записывается в его заголовок.

3. При индексировании FoxPro различает верхний и нижний регистры.

4. Все индексы рекомендуется разделить на две группы: первую группу включить в структурный индексный файл для повседневного использования; вторую группу включить в IDX-файлы или именной CDX-файл для редкого использования, например для получение отчётов.

5. Каждый тег в пределах CDX-файла должен иметь уникальное имя длиной не более 10 символов.

6. В VFP если для создания индекса DBF-файла включённого в базу данных (в DBC-файл) используется операционная оболочка   конструктор таблиц, закладка Index, то имеется возможность создания первичного ключа, т.е. такого, все значения которого уникальны. Для этого в Type необходимо выбрать тип primary. После создания такого индекса система будет контролировать уникальность первичного ключа. Если такой ключ будет создаваться для уже заполненной таблицы, которая имеет одинаковые значения в выбранном поле, то индекс не создаётся и выдается системное сообщение. Индекс такого типа для данного DBF-файла единственный.

В конструкторе таблиц поддерживается еще три типа индексов.

Тип Candidate – также не допускает повторяющихся значений, но таких индексов в DBF-файле может быть несколько.

Тип Unique – обеспечивает вывод только первой записи из возможного множества записей с одинаковым значением индексного выражения.

Тип Regular – не накладывает никаких ограничений.

7. С помощью визуальных средств (конструктора DBF-файлов) в VFP можно создавать теги только структурного файла.

8. В конструкторе DBF-файлов для задания “Сложного индекса” можно использовать построитель выражений.

9. Если создан индекс по символьному полю, то записи будут располагаться не “по алфавиту”, а в порядке кодов символов в ASCII–таблицы. Эти два порядка совпадают при данных в английском алфавите без различия регистров.

10. Командой SET COLLATE TO RUSSIAN (только VFP) будет установлен русскоязычный алфавитный порядок. Аналогичную установку можно сделать на вкладке DATE опция collating sequence.

7.5. Ускоренный поиск

Индексный файл не только упорядочивает базу данных для просмотра, но и ускоряет поиск в ней по ключевому выражению, заданному в индексе, если при этом пользоваться командой:
SEEK <значение ключевого выражения>.

Полный формат команды дихотомного поиска в VFP

SEEK <выражение>
[ORDER<выр.N>|<IDX–файл>|[TAG]<имя тега>[OF <CDX–файл>]]

[IN <рабочая область>] [ASCENDING|DISCENDING].

Эта команда выполняет поиск первой записи в текущем DBF-файле, для которой значение индексного выражения совпадает со значением указанного в команде выражения. Если <выражение> является символьным, то оно должно быть заключено в кавычки или квадратные скобки.

При выполнении команды используется алгоритм дихотомного поиска, сущность которого заключается в следующем. При наличии индексного файла (главного и открытого) сначала именно в нём, а не в самом DBF-файле ведётся дихотомный поиск номера записи с указанным в команде SEEК значением выражения в индексном поле. Такой поиск возможен только в упорядоченном файле, а индексный файл это упорядоченный файл, в котором значения ключа расположены в определённом порядке. Найденному значению ключа в индексном файле однозначно соответствует физический номер записи, которая имеет такое значение ключа в DBF-файле. По этому найденному в индексном файле номеру и устанавливается указатель записи в соответствующем DBF-файле. Команда разыскивает только одну первую запись, в которой в индексном поле находится <выражение>. Следовательно, индексный файл, с которым работает команда, как правило, содержит значения первичного ключа. Например: выполнив команды

USE BAZA INDEX IBAZA
SEEK “Лелянов”


DISPLAY FAM,

в результате получим следующее сообщение
RECOND FAM
1 Лелянов.


Функции RECNO(), FOUND(), EOF() реагируют на результаты поиска командой SEEK точно так же, как и на результаты поиска командами LOCATE и CONTINUE. Если поиск удачный, RECNO() равно номеру найденной записи, FOUND()=TRUE, EOF()=FALSE; если нет   RECNO() равно числу записей в базе плюс единица, FOUND()=FALSE, EOF()=TRUE. Всё это относится к индексам с FOR<условием>.

Функцией RECNO(0) можно организовать так называемый “мягкий поиск”. Если вы безуспешно применили команду SEEK, то RECNO(0) возвращает номер наиболее похожей записи и возвращает 0, если такой похожей записи найти не удается. Если выдать GO RECNO(0), когда похожая запись не найдена, VFP сгенерирует сообщение об ошибке. В данном случае указатель записи не позиционируется. В другом случае, команда SET NEAR on/OFF определяет, где будет расположен указатель текущей записи после неудачного поиска. При установке OFF (умолчание) он будет находиться в конце файла, ON – в наиболее близкой по ключу поиска записи. Например, следующая последовательность команд реализует мягкий поиск

SET NEAR ON

SEEK “Л”.

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

Кроме команды SEEK имеется функция с аналогичными функциональными возможностями. Ее формат
SEEK(<выражение>,[<область>]),
она устанавливает указатель на найденную запись и возвращает значение .Т. при успешном результате, а при неудачном поиске возвращает значение .F.

Сущность дихотомного (двоичного) поиска заключается в следующем. При выполнении SEEK <значение ключа> СУБД сравнивает значение искомого ключа с первым значением в индексном файле, затем, если эти значения не совпали, то   с последним значением.

Если последнее значение также не устраивает, VFP берёт ключ из середины. Известно количество записей N в текущем DBF-файле, это число делится на два и анализируется значение ключа в индексном файле расположенного в [N/2] месте (округлённое до целого).

Если равенство <ключ>=<выражение> выполняется, то поиск заканчивается. Если же <ключ> > <выражение>, то поиск ведётся аналогично в нижней части индексного файла, если <ключ><<выражение>   в верхней части.

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

В первом случае указатель записи устанавливается на запись с найденным в индексном файле номером, во втором – вырабатывается EOF()=TRUE. Например, для SEEK 234 в индексном файле будут выполнены три шага поиска.

IDX-файл

Номер
записи

Индексное выражение

3

1

7

2

4

6

5

6

13

54

98 – 1-й шаг

234--------------3-й шаг

468------ 2-й шаг

890


Предельное число сравнений при двоичном поиске оценивается выражением log2N, где N – число записей в DBF-файле. Это значит, что если DBF-файл содержит 1024 записи, то в худшем случае потребуется 10 обращений к индексу для розыска нужной записи. При последовательном поиске в худшем случае (последняя запись) потребуется 1024 операции просмотра.

Если индексный файл был создан, а затем в базе делались какие-то изменения, то для того, чтобы правильно работать с индексом, необходимо индексный файл обновить командой REINDEX. Обновление, как и создание индекса, требуют значительных временных затрат. Если происходит добавление нового тега с именем уже существующего тега, то старый тег удаляется. Однако составной CDX–файл увеличивается на размер добавляемого тега. Для сжатия файла также используют команду REINDEX.

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

При поиске по символьным полям необходимо знать правила, согласно которым VFP сравнивает две строки разной длины. Управлять процессом сравнения строк можно установкой SET EXACT ON | OFF.

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

Параметр OFF (по умолчанию) указывает, что выражения будут эквивалентны, если они совпадают посимвольно вплоть до конца выражения, расположенного справа от знака равенства. Установка SET EXACT не играет роли, если обе строки имеют одинаковую длину.

При сравнении строк в VFP для проверки совпадения предусмотрены два оператора отношения. Оператор = выполняет сравнение двух величин одного и того же типа. Данный оператор применяется для сравнения символьных, числовых, логических данных и дат. Символьные выражения сравниваются посимвольно слева направо до тех пор, пока не будет зафиксировано равенство этих выражений, или пока не будет достигнут конец выражения, расположенного справа от оператора = (SET EXACT OFF), или пока не будут достигнуты концы обоих выражений (SET EXACT ON).

Оператор == можно использовать, когда требуется провести точное сравнение данных символьного типа. Если два символьных выражения сравниваются с помощью оператора == , то они могут считаться равными только в том случае, если оба они состоят в точности из одинаковых символов, включая пробелы. Когда символьные строки сравниваются с помощью оператора == , установка SET EXACT игнорируется.

В следующей таблице показано, каким образом выбор оператора и установки SET EXACT влияет на проведение сравнения. (Символ подчеркивания обозначает пробел.)


Сравнение

= EXACT OFF

= EXACT ON

==

"abc" = "abc"

Совпадают

Совпадают

Совпадают

"ab" = "abc"

Не совпадают

Не совпадают

Не совпадают

"abc" = "ab"

Совпадают

Не совпадают

Не совпадают

"abc" = "ab_"

Не совпадают

Не совпадают

Не совпадают

"ab" = "ab_"

Не совпадают

Совпадают

Не совпадают

"ab_" = "ab"

Совпадают

Совпадают

Не совпадают

"" = "ab"

Не совпадают

Не совпадают

Не совпадают

"ab" = ""

Совпадают

Не совпадают

Не совпадают

"__" = ""

Совпадают

Совпадают

Не совпадают

"" = "___"

Не совпадают

Совпадают

Не совпадают

TRIM("___") = ""

Совпадают

Совпадают

Совпадают

"" = TRIM("___")

Совпадают

Совпадают

Совпадают


Областью действия команды SET EXACT является текущий сеанс.

Если при индексировании и поиске используется сложный ключ и есть сомнение в правильности его задания, то при отладке удобно в список полей команды BROWSE включить два вычисляемых поля: первое соответствует индексному выражению, а второе – номеру записи. Например, искомое выражение имеет вид STR(pol1,2)+ STR(pol2,3), тогда команда

BROWSE FIELDS pol1, pol2, pol3, pol4, ;

I=STR(pol1,2)+STR(pol2,3) : H=”Индекс”, ;

n=RECNO() : H=“N записи”,

в двух последних колонках будут отображаться значения сложного индексного выражения и номер записи.
7.6. Технология Rushmore и управление индексами

В FoxPro с версии 2.0 последовательный поиск и выполнение команд, содержащих FOR условие, также может быть реализованы с использованием индексов. При этом скорость доступа близка к скорости индексного поиска. Оптимизация стала возможной благодаря новой технологии доступа к данным, которую назвали Rushmore. Официально в названии технологии Рашмора не присутствует никакого смысла (это не аббревиатура, не имя автора и т.п.). Для её использования в прикладной программе необходимо наличие открытых индексных файлов с индексным выражением, присутствующем в FOR условии. Это условие называют оптимизируемым выражением. Технология не работает для индексов, которые сами построены с FOR условием или ключевым словом UNIQUE, а также для команд с WHILE условием.

Технология может быть использована с командами BROWSE, CHANGE, COUNT, DELETE, EDIT, LOCATE, REPLACE, SET FILTER и др. Каждая из этих команд (кроме SET FILTER) имеет ключевое слово NO OPTIMIZE, которое при необходимости оптимизацию отключает. Команда SET OPTIMIZE ON/OFF может полностью отключить оптимизацию (по умолчанию SET OPTIMIZE ON). Рассмотрим пример (рис. 7.6), в котором при поиске записей в TABL1 метод Рашмора не будет использоваться, а при поиске в TABL2 – будет. Пусть TABL1 проиндексирована по полю p11, a TABL2 – по полю p12, причём эти индексы открыты; пусть pp1 имеет тот же тип и размер что p11, a pp2 – что p12, и эти переменные являются означенными.

SELECT TABL1

LOCATE FOR p11=pp1 NO OPTIMIZE

DO WHILE FOUND ()

SELECT TABL2

LOCATE FOR p12>pp2

DO WHILE FOUND ()

[обработка]

CONTINUE

ENDDO

SELECT TABL1

CONTINUE

ENDDO

Для оптимизации программисту не нужно выполнять никаких специальных действий – она будет автоматически выполняться при наличии соответствующего открытого индексного файла. Однако желательно, чтобы при этом ни один индекс не был главным (ORDER 0), DBF-файл при этом будет иметь активный индекс, но он не будет упорядочен. Также желательно установить SET DELETED OFF. Оптимизация использует некоторые дополнительные ресурсы оперативной памяти.

Результат оптимизации полностью определяется оптимизируемым выражением. Это выражение, которое метод Рашмора пытается использовать для поиска данных. Различают полностью оптимизируемые, частично оптимизируемые и не оптимизируемые выражения. Если выражение не оптимизируемое, то метод его использовать не может, и поиск ведётся последовательным перебором. Выражение называется простым, если оно содержит только одно индексное выражение, связанное знаком отношения (<, >, =, <=, >=, <>, #) с константами, переменными и другими полями.

Пусть, например, файл BAZA. DBF

N3 C20 C1 N7

TABN

FAM

KDOL

OKL





проиндексирован по полям TABN, KDOL, STR(OKL,4), LEFT(FAM,10), им соответствуют индексные файлы IN1, IN2, IN3, IN4. Тогда выражение FAM=”Иванов” будет не оптимизируемым. А выражения TABN>300, KDOL=“5”, STR(OKL,4)<“2000” будет оптимизируемыми при наличии открытых IN1, IN2, IN3 индексных файлов.

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

Операция

Выражение 1

Выражение 2

Результат

AND

Оптимизируемое

Не оптимизируемое

Частично оптимизируемое

OR

Оптимизируемое

Не оптимизируемое

Не оптимизируемое


Например: .NOT. KDOL=“5” – полностью оптимизируемое,

TABN>300.AND. STR(OKL,4)<“2000” – полностью оптимизируемое,

TABN>500.AND.FAM#“K   частично оптимизируемое,

TABN>500.OR.FAM>“C – не оптимизируемое.

Команда LOCATE по сравнению с командой SEEK позволяет задавать сложные условия поиска при наличии простых индексных выражений.

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

USE [/?][IN<область>]

[AGAIN][NOUPDATE][INDEX<список индексных файлов>/?

[ORDER[<вырN>//[TAG]<имя тега>

[OF<СDX-файл>][ASCENRING/DISCENDRING]]]]

[ALIAS<псевдоним>][EXCLUSIVE]

Знак ? позволяет выбрать DBFфайл из доступных файлов в текущем каталоге. Если указано IN <область>, то файл откроется не в текущей, а в указанной рабочей области, но переход в эту область не произойдет.

AGAIN – позволяет открыть уже открытый DBFфайл в другой рабочей области. Однако каждый индекс может быть открыт одновременно только для одной рабочей области.

INDEX <список индексных файлов>   определяет перечень открытых индексных файлов. Здесь важен порядок перечисления индексов. Первый в списке индекс считается главным, если не использовано ключевое слово ORDER. Понятие главного индекса приведем ниже, <список индексных файлов> показывает очередность открытия файлов. С ним связана сквозная нумерация индексов. Независимо от того, какими командами открыты индексы и сколько этих команд, начальные номера получают IDX-индексы в порядке их открытия, следующие номера – теги структурного файла, за ними теги составных файлов в порядке их открытия. Нумерация идет с 1. Например:

USE BAZA INDEX INS1.CDX,IN1,IN2,IDX

SET INDEX INS2.СDX, IN3.IDX ADDITIVE.

Допустим, INS1 содержит два тега T1 и T2. INS2 – три тега T3, T4, T5, и имеется структурный индекс с тегами T6, T7. Тогда нумерация индексов будет назначена системой следующая:

IN1 IN2 IN3 T6 T7 T1 T2 T3 T4 T5

1 2 3 4 5 6 7 8 9 10

Первый в списке IDX индекс задает главный индекс, если опция ORDER не назначает другой главный индекс. Если список начинается с CDX файла, и нет параметра ORDER, то нет и главного индекса. Тогда используется физический порядок расположения записей. Параметр ALIAS <псевдоним> уже рассмотрен ранее.

Параметр NOUPDATE указывает на то, что база будет открыта только для просмотра   редактирование запрещено. Открытие файла всегда устанавливает указатель записей на его первую запись.

Новая команда USE открывает новый DBFфайл одновременно с закрытием старого файла в текущей области. Команда USE без имени файла закрывает DBFфайл и сопровождающие его вспомогательные файлы (типа IDX, CDX, FPT и др.) в текущей или в другой области. Остальные параметры управляют открытием главного индекса. Они полностью идентичны соответствующим параметрам команды SET INDEX, которые открывает только индексы (DBFфайл должен быть уже открытым)

SET INDEX TO [<список индексных файлов>]

[ORDER<вырN>/< индексный файл>/[TAG]<имя тега>

[OF][ASCENDING/DESCENDING][ADDITIVE]

Команда открывает перечисленные через запятую одно и многоиндексные файлы, кроме структурного многоиндексного файла, который открывается автоматически вместе со своим DBFфайлом. По умолчанию первый в списке IDX-файл или открытый первым становится главным индексом. Открытый первым CDX-файл не устанавливает главного индекса. Рассмотрим три способа назначения главного индекса.

1. Ключевое слово ORDER с параметром <вырN> указывает номер главного индексного файла среди перечисленных в списке открываемых IDX-файлов или среди тегов CDX-файла (номер по порядку создания), если нас не устраивает назначение главного индекса по умолчанию. Указание ORDER без параметра, либо <вырN>=0 означает, что главный индекс не назначается, хотя индексы открываются.

2. ORDER <IDX-файл >   главный индекс задается указанием имени индексного файла.

3. ORDER [TAG]<имя тега>[OF <CDX-файл>]   главный индекс задается именем тега (в структурном многоиндексном файле без ключевых слов [TAG] и [OF]).

ASSENDING/DESCENDING – определяет порядок использования индекса (по возрастанию или убыванию), даже если при его создании был использован противоположный закон.

ADDITIVE – открытие новых индексов не закрывает старые. Команда SET INDEX TO без параметров закрывает все индексные файлы, кроме структурного. Такое же действие осуществляет команда CLOSE INDEX.

Один и тот же DBFфайл может иметь любое число индексов, и все они могут быть одновременно открыты командами SET INDEX или USE INDEX. Например, команда
USE BAZA INDEX IN1, IN2
открывает два индекса IN1 и IN2.

При вводе, редактировании и удалении все открытые индексные файлы будут соответствующим образом изменены. Однако главным управляющим индексом, т.е. таким, в соответствии с которым при необходимости будет перемещаться указатель записей (или предъявляться записи командой BROWSE), может быть только один индекс. Им является одно индексный файл, открытый самым первым в командах открытия (в примере IN1). В случае составного индексного файла главный индекс не определен. Поэтому, если необходимо сделать главным какой либо другой индекс, используется ключевое слово ORDER либо команда

SET ORDER TO [<вырN>/файл>/[ТАG]<имя тега>

[OF][IN<область>][ASCENDING/DISCENDING][ADDITIVE].

Команда объявляет главный индекс/тег среди открытых IDX или CDX–файлов в текущей или указанной рабочей области. Ключевые слова команды определяют функции, совпадающие с описанными выше двумя командами.

Например, команда SET ORDER TO 2 сделает главным индекс IN2. Команда SET ORDER TO 0 или SET ORDER TO без параметра отключает все индексы от управления перемещением указателя записей и главный индекс будет отсутствовать (предъявление записей соответствует их физическому расположению). Однако сами индексные файлы остаются открытыми к изменению DBFфайла. При необходимости имя главного индексного файла может быть выполнено с помощью функции ORDER([<область>]), которая возвращает имя главного индексного файла или главного тега из многоиндексного файла для текущей рабочей области или области, заданной номером или псевдонимом. Рассмотрим еще ряд команд и функций, используемых при работе с индексными файлами.

Команда COPY INDEXES <IDX-файлы>/ALL [TO <CDX-файл>] копирует все (ALL) или перечисленные через запятую <IDX-файлы> в структурный или указанный многоиндексный <CDX-файл>. Каждый такой файл становится тегом в CDX-файле с тем же самым именем, что и IDX–файл. Если CDX-файла нет, то он создается.

COPY TAG <тег> [OF <CDX-файл>] TO <IDX-файл>,
наоборот создает <IDX-файл> (компактный) из поименованного тега, находящегося в указанном или (по умолчанию) структурном многоиндексном <CDX-файле>. Файл должен быть открыт. Команды
DELETE TAG <тег1> [OF <CDX-файл1>][,<тег2> [OF <CDX-файл2>]…
DELETE TAG ALL [OF<CDX- файл>]
удаляют указанные или все теги (для ALL удаляется и сам индексный файл) из открытого в текущей рабочей области CDX-файла. По умолчанию сначала рассматривается структурный CDX-файл (если он есть).

Функция NDX(<выр.N>[,<область>]) выдает прописными буквами полное имя индексного IDX-файла, открытого в текущей или указанной рабочей области. Выражение <выр.N> задает номер файлов в команде открытия. Если файла нет, то возвращается пустая строка.

Функция CDX(<вырN>[, <область>]) аналогична предыдущей, однако работает с многоиндексными файлами. Первым рассматривается структурный CDX–файл, если таковой имеется.

Если DBF-файлы небольшие и корректируются редко то без индексирования можно обойтись, создав упорядоченные копии этих файлов, командой SORT.

1   ...   11   12   13   14   15   16   17   18   19

Похожие:

Информационное обеспечение систем управления icon«Учебно-методический комплекс дисциплины «Информационное обеспечение систем управления»

Информационное обеспечение систем управления iconПояснительная записка
«Современная организация и технология документационного обеспечения управления». Он связан с курсами «Документоведение», «Информационное...
Информационное обеспечение систем управления iconИсследование систем управления процесс определения организационной...
Место исследований систем управления в комплексе дисциплин по теории и практке управления
Информационное обеспечение систем управления iconПрограммное обеспечение для отладки систем управления упругими объектами
Целью данной работы является разработка программного обеспечения для лабораторного стенда для изучения систем управления упругими...
Информационное обеспечение систем управления iconРабочая программа дисциплины «Информационное обеспечение, базы данных»
Факультет информационных систем и технологий Кафедра Прикладной математики и вычислительной техники
Информационное обеспечение систем управления iconУчебная программа по дисциплине " информационное обеспечение управления "
Изучение теоретических, методических и практических вопросов разработки, внедрения и совершенствования информационного обеспечения...
Информационное обеспечение систем управления iconРоссийской Федерации Самарский государственный архитектурно-строительный...
Информационные системы” являются информационные системы и сети, их математическое, информационное и программное обеспечение, способы...
Информационное обеспечение систем управления iconРабочая программа дисциплины «Архитектура ЭВМ и вычислительных систем»...
«Автоматизированные системы обработки информации и управления» (по отраслям) и 230105 «Программное обеспечение вычислительной техники...
Информационное обеспечение систем управления iconИсследование систем управления
Целью работы является рассмотрение частных методов исследования систем управления, а именно эксперимент, наблюдение и опрос
Информационное обеспечение систем управления iconПримерная тематика рефератов по курсу «Исследование систем управления»
Современный менеджмент и необходимость исследования систем управления социально-экономической организацией
Информационное обеспечение систем управления iconОрганизационно-правовое обеспечение правовой деятельности
Информационное обеспечение организации и проведения внеучебной работы
Информационное обеспечение систем управления iconИсследование систем управления Специальности: «Менеджмент организации»
«Исследование систем управления» является ведущей,в учебном процессе среди смежных дисциплин
Информационное обеспечение систем управления iconРеферат по дисциплине "Избирательное право" тема: Информационное...
Информационное обеспечение выборов. Правовое регулирование предвыборной агитации в РФ
Информационное обеспечение систем управления iconИнформационное обеспечение управления
В настоящее время классификационные схемы (классификаторы) строятся не только на основе соподчинения понятий (метод иерархии), но...
Информационное обеспечение систем управления iconКурсовая работа По дисциплине «Базы данных»
Программное обеспечение для создания систем управления базами данных
Информационное обеспечение систем управления iconРабочая программа учебной дисциплины «исследование систем управления»
Студенты научатся методам планирования эксперимента и организации исследования систем управления и научатся использовать приобретенные...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск