Смекни!
smekni.com

Методические рекомендации и задания для лабораторных работ по дисциплине Вычислительные системы (стр. 4 из 5)

SET FILTER TO GOD>1990

LIST

Будет выдана информация только по книгам, выпущенным после 1990г.

Если после включения фильтра дать команду COPY TO BDD то будет создана новая база, в которую войдут только книги, выпущенные после 1990г.

Действие фильтра отменяется при выходе из БД, например, при переходе к другой БД - USE BDD1.

Отменяется также заданием команды SET FILTER TO без указания условий. Установленный фильтр начинает действовать только в случае, если после команды SET FILTER TO <условия> произведено хоть какое-то перемещение указателя записей в файле БД (например, дана команда LIST, перемещающая этот указатель) При задании фильтра возможны логические условия

SET FILTER TO STEL>112.AND.GOD>1990

Заданный фильтр отменяется также заданием другого фильтра

SET FILTER TO STEL>112

Сортировка базы данных

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

Примеры:

USE BD1

SORT TO BD2 ON AVT база BD2 отсортирована по алфавиту авторов

SORT TO BD3 ON AVT/D обратная сортировка по алфавиту

SORT TO BD4 ON STEL по номеру стеллажа в возрастающем порядке

SORPT TO BD5 ON STEL/D в убывающем порядке

SORT TO BD6 ON VOZVR по дате возврата в порядке возрастания

Сортировка по нескольким полям:

SORT TO BD7 ON STEL,NOM/D по возрастанию номера стеллажа, а внутри каждого стеллажа в порядке убывания номера ячейки.

Сортировка базы позволяет ускорить в большой базе поиск нужной информации.

Индексирование баз данных

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

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

Индексные файлы занимают принципиально меньший объем, поэтому для больших БД необходима именно индексация, поскольку в неупорядоченной базе поиск длится долго, а сортировка невозможна из-за ограничений в дисковой памяти. Если файл проиндексирован, команды DISPLAY,BROWSE,SKIP,REPLACE и все другие, связанные с движением в файле базы данных, перемещают указатель записей в соответствии с индексом, а не с физическим порядком расположения записей. В частности, команды GO TOP и GO BOTTOM устанавливают указатель записей не на первую и последнюю физические записи, а на начальную и конечную записи индексного файла соответственно. Один файл БД может быть проиндексирован по нескольким полям и иметь любое число индексов. Такие файлы не содержат сами записи, а содержат только указание на порядок их расположения в файле БД для того поля, по которому осуществлена индексация. Например, при индексации поля авторов в алфавитном порядке в индексном файле будут содержаться записи такого типа 1 - 3 справа номера записей в файле БД в поле AVT,

2 - 1 слева номера записей в индексном файле

3 - 5 для поля AVT и аналогично для других полей.

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

Индексирование выполняется следующей командой

INDEX ON <выражение> TO <IDX-файл> [COMPACT] [ADDITIVE]

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

Индексированная база из текущей создается :

USE BD1

INDEX ON AVT TO BD2 - из базы BD1 создана индексированная по фамилиям база BD2 с расширением .IDX

Можно сделать ограниченную индексацию

INDEX ON AVT TO BD3 FOR STEL=112

После создания индексированной базой можно пользоваться след. образом: при открытии базы:

USE BD1 INDEX BD2 или

USE BD1

SET INDEX TO BD2

При корректировке записей БД индексированные файлы автоматически изменяются, поэтому при активизации БД нужно указывать все имеющиеся уже созданные индексированные файлы:

SET INDEX TO BD2,BD3 и т.д. сколько есть файлов .IDX

Отменаиндексации: SET INDEX TO или SET ORDER TO 0

Активным является только первый из указанных индексов. По нему индексируется база. Переключиться на другой индекс можно командой SET ORDER TO N - где N порядковый номер индексированного файла в последнем списке (SET INDEX TO ...). Можно сделать иначе - заново задать команду SET INDEX TO ... где нужный индекс должен быть у первого в списке индексного файла.

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

SEEK 'Попов' для строкового поля

SEEK 25 для числового

SEEK D где D=ctod('22.03.94') для даты

После каждой команды SEEK нужно дать команду DISPLAY для индикации результатов поиска. Пример.

USE BD

INDEX ON AVT TO BD1

INDEX ON VOZVR TO BD2

INDEX ON GOD TO BD3

USE BD INDEX BD1

SEEK ‘Попов’, DISPLAY

USE BD INDEX BD2, D=CTOD(‘22.03.94’), SEEK D, DISPLAY

USE BD INDEX BD3, SEEK 1992, DISPLAY

Если все индексные файлы не были перечислены при открытии базы, а она была изменена, нужно произвести переиндексацию командой

REINDEX предварительно задав командой SET INDEX TO ...

все индексные файлы, подлежащие переиндексации.

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

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

Сочетанием команды SEEK с командой SET NEAR ON может быть осуществлен приближенный поиск, если точное значение искомого признака неизвестно. Пример.

USE BD, INDEX ON GOD TO BD1 COMPACT, SET NEAR ON, SEEK 1980,

BROWSE

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

Команда SEEK является аналогом команды LOCATE для последовательного поиска. Однако команде продолжения поиска CONTINUE нет индексного аналога. Причина здесь очевидна. После того как командой SEEK найдена первая нужная запись, розыск остальных записей, удовлетворяющих ключу поиска, является тривиальным. Следующая такая запись (если есть) находится в индексированном файле непосредственно ниже найденной, и переход на нее может быть выполнен просто командой SKIP.

3. Задание на лабораторную работу.

3.1 В программной системе FoxPro.

1.Создать файл базы данных (БД)

(Create ...)

2.Посмотреть описание структуры БД

(Use, Liststructure) Пояснить содержание выдаваемой информации

3.Посмотреть на экране все записи БД

(List)

Посмотреть записи, удовлетворяющие заданному условию

(List... for ...)

Посмотреть содержимое выбранных полей для всех записей БД

(List fields...)

Посмотреть содержимое выбранных полей, удовлетворяющих заданному условию (List fields...for...)

Условия задать для символьного, числового и поля типа «дата»

Для полей типа «дата» предварительно задать

Set date german; D=CTOD(‘дата’);

List fields ...for D...)

Осуществить просмотр выбранных полей с приближенным условием (Listfieldsforlike ...)

4.Командой Display посмотреть содержимое с выбранным номером

5.Осуществить последовательный поиск и просмотр первой и последующих записей

(Locate for ...);

Display;

(Locate rest for...);

Display

6.Сделать архивную копию БД

(Copy to ...)

7.Добавить запись в конец активизированной рабочей БД

(Append)

8.Посмотреть добавленную запись

(Go bottom; Display)

9.Пометить для удаления последнюю запись и третью

(Delete; go 3; Delete)

10.Посмотреть все записи БД (Display all)

Обратить внимание на третью и последнюю записи.

Сравнитьварианты: Set deleted on; Display all

Set deleted off;Display all

11.Запросить количество записей файла БД

Сравнитьдваварианта: Set deleted on; ?reccount()

Set deleted off;?reccount()

12.Отменить пометку к удалению для третьей записи

(Recall record 3)

Посмотреть все записи. Объяснить результат

13.Выполнить физическое удаление помеченной записи (Pack)

Посмотреть все запси в двух вариантах:

Set deleted on и Set deleted off

14.Выполнить задание п.11 и сравнить полученные результаты

15.Вставить дополнительные записи в БД перед и после третьей

записи, используякоманды Insert blank, Insert before blank

Посмотреть все записи БД и сравнить с п.13

16.Удалить запись, вставленную после третьей записи.

Посмотреть все записи.