- •2 Модели и типы данных
- •2.1 Иерархическая модель данных
- •2.2. Сетевая модель данных
- •2.3. Реляционная модель данных
- •2.4. Многомерная модель данных
- •2.5. Объектно-ориентированная модель данных
- •2.6. Объектно- реляционная модель данных
- •2.7. Типы данных
- •2.8. Выбор моделей данных
- •2.9. Вопросы реализации баз данных на физическом уровне
- •2.9.1 Методы физического доступа
- •2.9.2 Сравнение методов последовательного и прямого доступа
- •2.9.3Поиск в файлах с помощью хэша
- •2.9.3.1 Сущность метода хэширования
- •2.9.3.2Стратегия разрешения коллизий с областью переполнения
- •2.9.3.3Разрешения коллизий при стратегии свободного замещения
- •2.9.4Поиск с помощью индексных файлов
- •2.9.4.1Типы индексных файлов
- •2.9.4.2 Файлы с плотным индексом или индексно-прямые файлы
- •2.9.4.2 Файлы с неплотным индексом или индексно-последовательные файлы
- •2.9.5 Организация данных на основе использования в-деревьев
- •2.9.5.1 Терминология и разновидности графов типа «дерево»
- •2.9.5.2 Индексирование на основе в-деревьев
- •2.9.5.3 Индексирование и поиск на основе использования двоичных деревьев
- •2.10 Выводы по итогам обзора моделей данных и методов доступа
2.9.5.3 Индексирование и поиск на основе использования двоичных деревьев
Индексирование и поиск с использованием двоичных деревьев характерно [9, 10] дляпоследовательных методов обработки данных. Двоичное (бинарное) дерево является разновидностью В-дерева. Любая вершина такого дерева состоит из совокупности значений первичного ключа, указателей индексов и (ассоциированных) данных. Указатель индекса используется для перехода на следующий, более низкий уровень вершин.«Хранимые» в вершине данные фактически представляют собой совокупность указателей данных и служат для физической организации данных, определения положения данных, ключевое значение которых хранится в этой вершине индекса. Физическая организация ветвящейся вершины В-дерева подобна физической последовательной структуре.
Сущность метода рассмотрим на примере индексирования таблицы 2.3.
Проиндексировать таблицу – значит создать для нее индексный файл, который позволяет быстро выполнить поиск нужной информации по значению ключа. Суть индексирования сводится к созданию двоичного дерева (Д-дерева). Пусть в качестве ключевого поля при создании индекса используется атрибут Код. Выполним сортировку записей по значению этого атрибута:
Таблица 2.3
|
Код |
Другие поля |
|
11 |
|
|
13 |
|
|
21 |
|
|
34 |
|
|
37 |
|
|
43 |
|
Далее рассматривается только упорядоченный список значений поля Код. Выделим средний элемент списка (21) и поместим его в корень перевернутого дерева. Этот элемент разбивает список номеров примерно на два равных подсписка: {11,13} и {34,37,43}. В каждом из подсписков (верхнем и нижнем относительно 21 в таблице) выделим свои середины (13,37) и соединим их с корнем (Рис. 2.23).

Рис. 2.23. Пример Д-дерева
Элементы с меньшим номером размещаются влево, а с большим номером – вправо относительно родительской вершины. Элементы 13 и 37 разбивают соответствующие подсписки на новые подсписки, в данном случае – {11};{34} и {47}. Следовательно, процесс построения дерева можно повторить, соединив вершину 13 с серединой подсписка {11} (в данном случае – просто с вершиной 11), а вершину 37 – с серединами подсписков {34} и {43}, как показано на Рис.2.23.
Построенное Д-дерево позволяет радикально сократить время поиска записи в таблице. Алгоритм работы Д-дерева (в вершинах) представлен на рис. 2.24. Этот метод дает хорошее использование памяти, обладает малым числом подопераций.

Рис. 2.24. Алгоритм поиска по Д-дереву:
КЗ — ключ запроса; КД — ключ данных,
k – номер уровня, K – число уровней
Например, пусть выполняем поиск записи, для которой Код=43. Если Д-дерево не использовать, то нужно просмотреть все значения в колонке Код. При использовании дерева сравниваем искомый код со значением в корне дерева, т.е. 21. Поскольку 43 > 21, то переходим по связи вправо от корня, т.е. в вершину 37. Снова сравниваем искомый код 43 с кодом вершины - 37. Поскольку 43>37, то опять двигаемся вправо и попадаем на искомую вершину. При выполнении поиска нам потребовалось выполнить 3 сравнения искомого кода 43 с кодами вершин 21, 37 и 43. В общем случае при наличии в дереве N>0 вершин число сравнений в худшем случае составитLog2 N. Эта величина намного меньше N (например, при N=32000Log2N=16).
Итак, Д-дерево – это еще один вариант математического представления индексного файла или просто индекса. Используя разные ключевые поля, можно создавать многоиндексные БД, правда, при этом следует учитывать, что размер такой БД растет весьма значительно.
