Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика программирование, учебник.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
22.08 Mб
Скачать

3.4 Организация прямого доступа к компонентам файла

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

Работа с файлом произвольного доступа предполагает его создание, просмотр и корректировку. Организовать файл произвольного доступа можно двумя способами:

  1. Создать последовательный файл и обращаться к компонентам по их порядковому номеру, трактуя последовательный файл как произвольный;

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

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

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

Ключевые поля индексного файла бывают простые и составные. Простой ключ представляет собой значение только одного поля основного набора, или части этого поля. Составной ключ - это комбинация двух и более полей, или их частей. Составной ключ формируется с двумя целями. Во-первых придать записи уникальный префикс, играющий роль идентификатора. Например, фамилия + имя + отчество - позволяют в достаточно большом коллективе около 4000 человек, где десять Ивановых, восемь Петровых и два Дудкина, выбрать одного единственного сотрудника. Во-вторых упорядочить все записи файла в соответствии с требованиями. Например, требуется, упорядочить всех сотрудников по фамилии, для совпадающих фамилий по инициалам.

Имя индексного файла обычно формируется следующим образом. Собственное имя, до восьми литер, часто повторяет имя основного базового файла. Напомним, что в нашем примере базовый файл имеет имя STUDENTS.DAT. Последние три символа определяют тип файла. Для индексных файлов тоже существуют свои расширения, принятые в соответствующих системах программирования баз данных. Мы будем использовать расширение .NTX, позаимствовав его у индексных файлов CLIPPER. Таким образом, полное имя нашего индексного файла будет STUDENTS.NTX.

Приведем структуру индексного файла STUDENTS.NTX и его данные, построенного для табл. 3.1, соответствующей файлу STUDENTS.DAT (см. табл. 3.2).

Таблица 3.2.

Фамилия студента

Номер записи

FIO

NAMBER

АНИСИМОВ

10

АФАНАСЬЕВ

0

БУНАКОВ

12

ВАСИЛЬЕВ

2

ВАХРУШЕВА

16

ВЕЙНЕРМАН

7

ВЫСОЦКИЙ

17

ГАВРИЛОВ

5

ГОРОХОВ

19

ИВАНОВА

6

ЗИБЕРМАН

9

ПЕТРОВ

11

СЕМЕНОВ

14

СЕРЕГИНА

18

СИДОРОВ

4

СЫЧЕВ

1

УШАКОВ

3

ФАДЕЕВ

13

ЩУКИНА

15

ЯКУШЕВ

8

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