Давыдов Е. С.
Иерархическая модель данных является наиболее простой среди всех даталогических моделей. Исторически она появилась первой среди всех даталогических моделей : именно эту модель поддерживает первая из зарегистрированных промышленных СУБД IMS фирмы IBM.
База данных ( БД ) Сегмент ( Запись ), разделяют тип сегмента и экземпляр сегмента Тип сегмента это поименованная совокупность типов элементов данных, в него входящих. Экземпляр сегмента образуется из конкретных значений полей или элементов данных, в него входящих. Поле
Для возможности различия отдельных записей в данном наборе каждый тип сегмента должен иметь ключ или набор ключевых атрибутов ( полей, элементов данных ). Ключом называется набор элементов данных, однозначно идентифицирующих экземпляр сегмента.
В иерархической модели сегменты объединяются в ориентированный древовидный граф. При этом полагают, что направленные ребра графа отражают иерархические связи между сегментами : каждому экземпляру сегмента, стоящему выше по иерархии и соединенному с данным типом сегмента, соответствует несколько ( множество ) экземпляров данного ( подчиненного ) типа сегмента. Тип сегмента, находящийся на более высоком уровне иерархии, называется логически исходным по отношению к типам сегментов, соединенным с данным направленными иерархическими ребрами, которые в свою очередь называются логически подчиненными по отношению к этому типу сегмента. Иногда исходные сегменты называют сегментами - предками, а подчиненные сегменты называют сегментами - потомками.
Схема иерархической БД представляет собой совокупность отдельных деревьев, каждое дерево в рамках модели называется физической базой данных. Каждая физическая БД удовлетворяет следующим иерархическим ограничениям : в каждой физической БД существует один корневой сегмент, то есть сегмент, у которого нет логически исходного ( родительского ) типа сегмента ; каждый логически исходный сегмент может быть связан с произвольным числом логически подчиненных сегментов ; каждый логически подчиненный сегмент может быть связан только с одним логически исходным ( родительским ) сегментом.
Очень важно понимать различие между сегментом и типом сегмента оно такое же, как между типом переменной и самой переменной : сегмент является экземпляром типа сегмента. Например, у нас может быть тип сегмента Группа ( Номер, Староста ) C егменты этого типа, такие как (4305, Петров Ф. И.) или (383, Кустова Т. С.).
Каждая физическая база описывается набором операторов, определяющих как ее логическую структуру, так и структуру хранения БД. Описание начинается с оператора DBD (Data Base Definition): DBD Name =, ACCESS =
Способ доступа определяет способ организации взаимосвязи физических записей : HSAM hierarchical sequential access method ( иерархически последовательный метод ); HISAM hierarchical index sequential access method ( иерархически индексно - последовательный метод ); HDAM hierarchical direct access method ( иерархически прямой метод ); HIDAM hierarchical index direct access method ( иерархически индексно - прямой метод ); INDEX индексный метод.
DATA SET D01 =. DEVICE =, [OVFLW = ]
SEGM NAME =. BYTES =. FREQ = PARENT = Для корневого сегмента PARENT=0
FIELD NAME = {( [. SEQ].{U M}) | }. START =, BYTES =, TYPE = {X | Р | С } SEQ – задается для ключевого поля
DBDGEN указывает на конец последовательности управляющих операторов описания БД ; FINISH устанавливает ненулевой код завершения при обнаружении ошибки ; END конец.
DBD NAME =, ACCESS = LOGICAL DATA SET = LOGICAL. SEGM NAME =, PARENT =, SOURCE =( Имя соответствующего сегмента ФБД. имя ФБД ) DBDGEN FINISH END
Синтаксис : GET UNIQUE WHERE ; Назначение : Получить единственное значение. Пример : Найти типовую модель стоимостью не более $600, которая существует не менее чем в 10 экземплярах. GET UNIQUE ТИПОВЫЕ МОДЕЛИ WHERE Типовые модели. Стоимость = 10
Синтаксис : GET NEXT WHERE Назначение : Получить следующий экземпляр сегмента для тех же условии. Пример : Напечатать полный список заказов стоимостью не менее $500. GET UNIQUE ИНДИВИДУАЛЬНЫЕ МОДЕЛИ WHERE Индивидуальные модели. Стоимость >- $500 WHILE NOT EAIL ( пока не конец поиска ) DO PRINT заказа. Стоимость, Количество GET NEXT ИНДИВИДУАЛЬНЫЕ МОДЕЛИ END
Синтаксис : GET NEXT WITHIN PARENT [ where ] Назначение : Получить следующий для того же исходного. Пример : Получить перечень винчестеров, имеющихся на складе номер 1, в количестве не менее 10 с объемом 10 Гбайт. GET UNIQUE СКЛАД WHERE Склад. Номер = 1 GET NEXT ИЗДЕЛИЕ WITHIN PARENT WHERE Изделие. Наименование = " Винчестер " GET NEXT ХАРАКТЕРИСТИКИ WITHIN PARENT WHERE ХАРАКТЕРИСТИКИ. Параметр = 10 AND ХАРАКТЕРИСТИКИ. Единицы Измерения = Гб AND ХАРАКТЕРИСТИКИ. Величина > 10 While Not Fail ( пока поиск не завершен ) DO Get Next Within Parent end
Найти и удержать единственный экземпляр сегмента. Эта операция подобна первой операции поиска GET UNIQUE, единственным отличием этой операции является то, что после выполнения этой операции пал найденным экземпляром сегмента допустимы операции модификации ( изменения ) данных. Синтаксис : GET HOLD UNIQUE WHERE
Найти и удержать следующий с теми же условиями поиска. Аналогично операции 4 эта операция дублирует вторую операции поиска GET NEXT с возможностью выполнения последующей модификации данных. Синтаксис : GET HOLD NEXT [WHERE ]
Получить и удержать следующий для того же родителя. Эта операция является аналогом операции поиска 3, но разрешает выполнение операций модификации данных после себя. Синтаксис : GET HOLD NEXT WITHIN PARENT [ where ]
Удалить : Это первая из трех операций модификации. Синтаксис : DELETE
Обновить Синтаксис : UPDATE
Ввести новый экземпляр сегмента. Синтаксис : INSERT