Введение
Иерархическая база данных – одна из старейших моделей организации и хранения данных в ЭВМ, в которой все записи структурированы в виде перевёрнутого дерева. Каждый узел дерева называется сегментом и содержит набор полей данных. Между узлами установлены строгие отношения «родитель–потомок» (parent–child): каждый потомок имеет ровно одного родителя, а у родителя может быть множество потомков.
Классическим представителем иерархической СУБД является IBM IMS (Information Management System), разработанная в конце 1960-х годов совместно Rockwell и IBM для проекта Apollo. IMS до сих пор используется в мейнфрейм-системах крупнейших банков и телекоммуникационных компаний.
История и контекст
IBM IMS была разработана в 1966–1968 годах и впервые применена NASA для управления запасными частями ракетной программы Saturn V / Apollo. Официально выпущена IBM в 1968 году. В последующие десятилетия IMS стала стандартом де-факто для транзакционных систем на мейнфреймах IBM zSeries.
К 1970-м годам Эдгар Кодд предложил реляционную модель данных (реляционные СУБД), которая преодолевала ключевые ограничения иерархической модели. Тем не менее иерархические СУБД сохранились в критических корпоративных системах, и IBM продолжает развивать IMS – последние версии (IMS 15.4) добавляют поддержку SQL и REST API поверх классической иерархической структуры.
Как это работает
Структура иерархической базы данных строится вокруг нескольких ключевых понятий:
- Корневой сегмент (Root Segment) – вершина дерева, не имеющая родителя. Определяет тип записи базы данных.
- Зависимые сегменты (Dependent Segments) – все остальные сегменты, находящиеся ниже корневого. Делятся на прямые потомки и транзитивно зависимые.
- Запись базы данных (Database Record) – корневой сегмент и все его зависимые сегменты.
Доступ к данным осуществляется двумя способами: последовательный (прход дерева в preorder: слева направо, сверху вниз) и случайный (по составному ключу, объединяющему ключевые поля сегментов от корня до нужного уровня). Язык манипулирования данными в IMS – DL/I (Data Language/I).
Для отношений «многие ко многим» иерархическая модель требует дублирования данных или использования логических баз данных – виртуальных представлений, объединяющих сегменты из нескольких физических баз через указатели.
Где применяется
- Банковская сфера – ядровые АБС на мейнфреймах IBM z, обрабатывающие миллиарды транзакций в сутки.
- Телекоммуникации – биллинговые системы крупных операторов связи.
- XML и JSON – иерархическая структура как принцип организации данных (XML-документы, JSON-объекты с вложенностью).
- Файловые системы – каталоги и подкаталоги файловой системы реализуют иерархическую модель.
- LDAP – протокол каталогов (Active Directory) использует иерархическую модель данных.
Преимущества и ограничения
Преимущества: высокая скорость навигации по предопределённым путям доступа, предсказуемая производительность для транзакционных нагрузок, простота модели при чётко выраженной иерархии сущностей, зрелость и надёжность реализаций (IMS используется 50+ лет).
Ограничения: неэффективность для отношений «многие ко многим» (требует дублирования), жёсткость схемы (сложно реструктурировать), сложность ad-hoc запросов по сравнению с SQL, ограниченная поддержка современных аналитических инструментов.
Связь с другими понятиями
Иерархическая модель является одной из трёх исторических моделей СУБД наряду с сетевой моделью (CODASYL) и реляционной моделью (SQL). Современные NoSQL-базы данных (документоориентированные – MongoDB, документы JSON/XML) концептуально реализуют иерархическую модель для неструктурированных данных. Протокол LDAP и система Active Directory используют иерархический принцип для хранения объектов каталога. XML-документы, которые являются иерархическими по природе, обрабатываются с помощью XPath/XQuery – языков, аналогичных DL/I для иерархических БД.