uzluga.ru
добавить свой файл
1


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

Давыдов Е.С.

Иерархическая модель данных является наиболее простой среди всех даталогических моделей. Исторически она появилась первой среди всех даталогических моделей: именно эту модель поддерживает первая из зарегистрированных промышленных СУБД 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

Пример



Пример



DML Оператор поиска

Синтаксис:

GET UNIQUE <имя сегмента> WHERE <список поиска>;

Назначение: Получить единственное значение.

Пример: Найти типовую модель стоимостью не более $600, которая существует не менее чем в 10 экземплярах. GET UNIQUE ТИПОВЫЕ МОДЕЛИ

WHERE Типовые модели.Стоимость <= $600

AND Типовые модели,Количество на складе >= 10

DML Оператор поиска

Синтаксис:

GET NEXT <имя сегмента> WHERE <список аргументов поиска>

Назначение: Получить следующий экземпляр сегмента для тех же условии.

Пример:

Напечатать полный список заказов стоимостью не менее $500.

GET UNIQUE ИНДИВИДУАЛЬНЫЕ МОДЕЛИ

WHERE Индивидуальные модели.Стоимость >- $500

WHILE NOT EAIL (пока не конец поиска) DO

PRINT № заказа. Стоимость, Количество

GET NEXT ИНДИВИДУАЛЬНЫЕ МОДЕЛИ

END

DML Оператор поиска

Синтаксис: 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 <имя сегмента>