Пусть надо найти фамилии и инициалы всех сотрудников, работающих в должности ассистента. Очевидно, Кдоступ = <название (должности) = ассистент>. Поиск осуществляется последовательным выполнением шагов:

1)  по индексу для ключа название (должности) определяется запись со значением первого поля, равным ассистент (поскольку индекс – это упорядоченный файл, к нему применяются рассмотренные ранее методы, например, метод последовательного сканирования, анализ работы которых в данном случае не приводится). Это первая запись индекса;

2)  по полю № п/п выясняется номер записи основного файла с искомым ключом доступа – это запись с номером 3;

3)  в основном файле выбирается третья запись. Выводится фамилия и инициалы сотрудника – это ;

4)  в соответствии со значением поля № п/п для поля название (должности) в основном файле определяется номер следующей записи основного файла с аналогичным значением вторичного ключа – поскольку данное поле не содержит ссылки, это означает, что цепочка записей закончилась, следовательно, список сотрудников сформирован; алгоритм заканчивает работу.

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

Например, основной список представлен таблицей:

сотрудник

ФИО

ученая степень

№ п/п

научное звание

№ п/п

контактные данные

название (кафедры)

№ п/п

название (должности)

№ п/п

к. т.н.

2

доцент

-

234567

СУиВТ

3

доцент

2

к. т.н.

-

нет

3

456789

ТАМ

4

доцент

-

нет

-

нет

-

123456

СУиВТ

-

ассистент

-

д. т.н.

-

профессор

-

345678

ТАМ

-

профессор

-

Индексы модифицированы и показаны в таблицах (дополнительные поля показаны заливкой):

НЕ нашли? Не то? Что вы ищете?

ученая степень

№ п/п

длина цепочки

научное звание

№ п/п

длина цепочки

название (кафедры)

№ п/п

длина цепочки

название (должности)

№ п/п

длина цепочки

д. т.н.

4

1

доцент

1

1

СУиВТ

1

2

ассистент

3

1

к. т.н.

1

2

нет

2

2

ТАМ

2

2

доцент

1

2

нет

3

1

профессор

4

1

профессор

4

1

Значения полей длина цепочки – это количество записей основного файла с соответствующим значением вторичного ключа.

Пусть надо определить, какие сотрудники работают в должности доцентов и не имеют ученой степени. Очевидно, Кдоступ = <название (должности) = доцент, ученая степень = нет). Задача решается следующим образом:

1)  в индексах для вторичных ключей название (должности) и ученая степень ищутся записи со значениями полей доцент и нет: это, соответственно, записи с номерами 2 и 3;

2)  анализируется, для какого индекса поле длина цепочки имеет минимальное значение: очевидно, длина цепочки для ключа со значением нет короче, чем для ключа со значением доцент, поэтому для поиска в основном файле определяется ключ ученая степень со значением нет;

3)  в соответствии со значением поля № п/п выбранного ключа осуществляется обращение к элементу с номером 3 основного файла;

4)  у выбранного элемента анализируется поле название (должности): его значение равно ассистент: данная запись не удовлетворяет условиям поиска, а потому никакого вывода данных пользователю не происходит;

5)  в соответствии со значением поля № п/п для поля ученая степень определяется номер следующей записи основного файла с аналогичным значением вторичного ключа. Поскольку это поле не содержит ссылки, это означает, что цепочка записей закончилась, следовательно, список сотрудников сформирован (он пуст); алгоритм заканчивает работу.

3.4.1.6. Инвертированные файлы

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

Пусть основной файл показан в таблице:

сотрудник

ФИО

ученая степень

научное звание

контактные данные

название (кафедры)

название

(должности)

к. т.н.

доцент

234567

СУиВТ

доцент

к. т.н.

нет

456789

ТАМ

доцент

нет

нет

123456

СУиВТ

ассистент

д. т.н.

профессор

345678

ТАМ

профессор

Соответствующие индексы показаны в таблицах:

ученая степень

№ п/п

научное звание

№ п/п

название (кафедры)

№ п/п

название (должности)

№ п/п

д. т.н.

4

доцент

1

СУиВТ

1, 3

ассистент

3

к. т.н.

1, 2

нет

2, 3

ТАМ

2, 4

доцент

1, 2

нет

3

профессор

4

профессор

4

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11