Открыть сервис

Иерархическая модель данных

Иерархическая модель данных — это модель данных, в которой информация организована в виде древовидной структуры (графа-дерева), где каждый узел (запись) может иметь несколько подчинённых узлов (потомков), но не более одного родительского узла (предка). Иерархическая модель является одной из старейших моделей данных, получившей распространение в ранних системах управления базами данных (СУБД) и до сих пор сохраняющей актуальность в специализированных областях, таких как файловые системы, XML-документы и LDAP-каталоги.

Основные понятия

В иерархической модели данные представляются как совокупность узлов (также называемых сегментами, записями или элементами), соединённых направленными связями «родитель — потомок». Каждый узел содержит набор полей (атрибутов), описывающих его свойства. Структура в целом соответствует математическому понятию дерева.

Определяющие характеристики:

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

История и развитие

Иерархическая модель данных была разработана в середине 1960-х годов, главным образом в рамках проекта IBM Information Management System (IMS). IMS, созданный для программы «Аполлон» (NASA), стал одной из первых коммерчески успешных СУБД. Модель основывалась на навигационном подходе к доступу к данным, где программист вручную перемещался по дереву с помощью специальных команд.

В 1971 году Конференция по языкам систем данных (CODASYL) предложила альтернативную сетевую модель, более гибкую, но и более сложную. Тем не менее, иерархические системы доминировали в мейнфреймовом мире до середины 1980-х годов, пока их не начали вытеснять реляционные СУБД (например, IBM DB2, Oracle). Реляционная модель, основанная на математической теории множеств, предложила большую гибкость, независимость данных и удобство работы через язык запросов SQL.

Однако иерархическая модель не исчезла полностью. Она получила «второе рождение» с распространением языка разметки XML и технологии LDAP, а также остаётся естественным способом представления таких данных, как каталоги товаров, организационные структуры, генеалогические деревья и файловые системы.

Организация данных

В иерархической СУБД типы узлов определяются схемой базы данных. Для каждого типа задаётся набор полей (например, для типа «Сотрудник»: фамилия, должность, зарплата) и правила подчинённости (какие типы могут быть потомками данного типа). Схема описывается в терминах «сегментов» и «связей».

Пример простейшей иерархии для отдела кадров:

Здесь «Отдел» — корневой сегмент, «Сотрудник» — дочерний по отношению к «Отделу», а «Проект» — дочерний по отношению к «Сотруднику». Каждый конкретный экземпляр отдела может содержать нескольких сотрудников, а каждый сотрудник — несколько проектов. Однако один и тот же проект не может принадлежать двум разным сотрудникам (если только не использована избыточность или не введён дополнительный уровень иерархии).

Физически данные хранятся в виде последовательностей записей, связанных указателями. Распространены две схемы хранения:

Операции над данными

Работа с иерархическими данными осуществляется с помощью навигационных операторов, которые перемещают курсор (указатель текущей записи) по дереву. Типовые операции:

Поиск данных требует указания полного пути от корня к искомой записи. Например, чтобы найти сотрудника с табельным номером 123 в отделе «Продажи», необходимо сначала установить курсор на отдел «Продажи», затем среди его дочерних записей найти сотрудника с нужным номером. Такой способ доступа называют навигационным.

Языки обработки данных в иерархических СУБД (DL/I для IMS, DL/1 для DLI) были процедурными, то есть программист должен был явно описывать последовательность переходов по дереву. Это делало разработку сложных запросов трудоёмкой, особенно по сравнению с декларативным SQL.

Достоинства и недостатки

Достоинства:

Недостатки:

Сравнение с другими моделями

Иерархическая модель исторически предшествовала сетевой и реляционной. Основные отличия:

ХарактеристикаИерархическая модельСетевая модель (CODASYL)Реляционная модель
Типы связей1:N, строгое деревоM:N, произвольные графыМножества, связи через внешние ключи
Доступ к даннымНавигационный (по пути)Навигационный (по наборам)Декларативный (SQL)
Гибкость схемыНизкаяСредняяВысокая
Производительность на типовых задачахВысокая (для иерархий)Высокая (для сложных сетей)Средняя (зависит от оптимизации)
Примеры СУБДIMS, System 2000, AdabasIDMS, DBMS-10Oracle, PostgreSQL, MySQL

Современное применение

Несмотря на доминирование реляционных и NoSQL СУБД, иерархическая модель остаётся востребованной в ряде областей:

Интересные факты

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →