Дореляционные СУБД
активно использовались в течение многих лет. Некоторые из ранних систем
используются и в наше время, накоплены громадные базы данных, и одной из
актуальных проблем информационных систем является использование этих систем
совместно с современными системами.
Все ранние системы не
основывались на каких-либо абстрактных моделях. Понятие модели данных фактически
вошло в обиход специалистов в области БД только вместе с реляционным подходом.
Абстрактные представления ранних систем появились позже на основе анализа и
выявления общих признаков у различных конкретных систем.
В ранних системах
доступ к БД производился на уровне записей. Пользователи этих систем
осуществляли явную навигацию в БД, используя языки программирования, расширенные
функциями СУБД. Интерактивный доступ к БД поддерживался только путем создания
соответствующих прикладных программ с собственным интерфейсом.
Навигационная природа
ранних систем и доступ к данным на уровне записей заставляли пользователя самого
производить всю оптимизацию доступа к БД, без какой-либо поддержки системы.
После появления
реляционных систем большинство ранних систем было оснащено "реляционными"
интерфейсами. Однако в большинстве случаев это не сделало их по-настоящему
реляционными системами, поскольку оставалась возможность манипулировать данными
в естественном для них режиме.
В системах,
основанных на инвертированных списках база данных, организованная с помощью
инвертированных списков, похожа на реляционную БД, но с тем отличием, что
хранимые таблицы и пути доступа к ним видны пользователям. При этом:
Строки таблиц
упорядочены системой в некоторой физической последовательности.
Физическая
упорядоченность строк всех таблиц может определяться и для всей БД.
Для каждой
таблицы можно определить произвольное число ключей поиска, для которых строятся
индексы. Эти индексы автоматически поддерживаются системой, но явно видны
пользователям.
Поддерживаются два
класса операторов:
Операторы,
устанавливающие адрес записи, среди которых:
прямые
поисковые операторы (например, найти первую запись таблицы по некоторому пути
доступа);
операторы,
находящие запись в терминах относительной позиции от предыдущей записи по
некоторому пути доступа.
Операторы над
адресуемыми записями. Типичный набор
операторов:
LOCATE FIRST –
найти первую запись таблицы T в физическом порядке. Возвращает адрес записи.
LOCATE FIRST
WITH SEARCH KEY EQUAL – найти первую запись таблицы T с заданным значением ключа
поиска K. Возвращает адрес записи.
LOCATE NEXT –
найти первую запись, следующую за записью с заданным адресом в заданном пути
доступа. Возвращает адрес записи.
LOCATE NEXT
WITH SEARCH KEY EQUAL – найти следующую запись таблицы T в порядке пути поиска с
заданным значением K. Должно быть соответствие между используемым способом
сканирования и ключом K. Возвращает адрес записи.
LOCATE FIRST
WITH SEARCH KEY GREATER – найти первую запись таблицы T в порядке ключа поиска K
cо значением ключевого поля, большим заданного значения K. Возвращает адрес
записи.
RETRIVE –
выбрать запись с указанным адресом.
UPDATE –
обновить запись с указанным адресом.
DELETE –
удалить запись с указанным адресом.
STORE –
включить запись в указанную таблицу; операция генерирует адрес записи.
Особенностью систем,
основанных на инвертированных списках, является то, что общие правила
определения целостности БД отсутствуют. В некоторых системах поддерживаются
ограничения уникальности значений некоторых полей, но в основном все возлагается
на прикладную программу.
Иерархическая БД
состоит из упорядоченного набора деревьев – более точно, из упорядоченного
набора нескольких экземпляров одного типа дерева.
Тип дерева состоит из
одного "корневого" типа записи и упорядоченного набора из нуля или более типов
поддеревьев (каждое из которых является некоторым типом дерева). Тип дерева в
целом представляет собой иерархически организованный набор типов записи. Далее
на рисунке представлен пример (Рисунок
2).
Рисунок2. Пример
иерархии
Здесь «Группа» является
предком для «Альбомы» и «Участники группы», а «Альбомы» и «Участники группы» –
потомки «Группа». Между типами записи поддерживаются связи.
Рисунок 3.
Пример одного экземпляра дерева
Все экземпляры данного
типа потомка с общим экземпляром типа предка называются близнецами. Для БД
определен полный порядок обхода – сверху-вниз, слева-направо.
Примерами типичных
операторов манипулирования иерархически организованными данными могут быть
следующие ( Рисунок 3):
Найти указанное
дерево БД (например, группу с номером 310);
Перейти от
одного дерева к другому;
Перейти от
одной записи к другой внутри дерева (например, от группы к первому участнику
группы);
Перейти от
одной записи к другой в порядке обхода иерархии;
Вставить новую
запись в указанную позицию;
Удалить текущую
запись.
Ограничения целостности
иерархических систем:
Автоматически
поддерживается целостность ссылок между предками и потомками.
Основное
правило: никакой потомок не может существовать без своего родителя.
Аналогичное поддержание
целостности по ссылкам между записями, не входящими в одну иерархию, не
поддерживается.
Сетевой подход к
организации данных является расширением иерархического. В иерархических
структурах запись-потомок должна иметь в точности одного предка, в сетевой
структуре данных потомок может иметь любое число предков.
Сетевая БД состоит из
набора записей и набора связей между этими записями, а если говорить более
точно, из набора экземпляров каждого типа из заданного в схеме БД набора типов
записи и набора экземпляров каждого типа из заданного набора типов связи.
Тип связи определяется
для двух типов записи: предка и потомка. Экземпляр типа связи состоит из одного
экземпляра типа записи предка и упорядоченного набора экземпляров типа записи
потомка. Для данного типа связи L с типом записи предка P и типом записи потомка
C должны выполняться следующие два условия:
Каждый
экземпляр типа P является предком только в одном экземпляре L;
Каждый
экземпляр C является потомком не более, чем в одном экземпляре L.
Рисунок 4. Пример
сетевой схемы БД:
Примерный набор
операций может быть следующим:
Найти
конкретную запись в наборе однотипных записей (участника группы Джени);
Перейти от
предка к первому потомку по некоторой связи (к первому участнику группы 310);
Перейти к
следующему потомку в некоторой связи (от участника группы Джени к участнику
группы Джонас);
Перейти от
потомка к предку по некоторой связи (найти группу по участнику Джени);
Создать новую
запись;
Уничтожить
запись;
Модифицировать
запись;
Включить в
связь;
Исключить из
связи;
Переставить в
другую связь и т.д.
В принципе, поддержание
ограничения целостности не требуется, но иногда требуют целостности по ссылкам
(как в иерархической модели).
Достоинства
дореляционных СУБД:
Развитые
средства управления данными во внешней памяти на низком уровне.
Возможность
построения вручную эффективных прикладных систем.
Возможность
экономии памяти за счет разделения подобъектов (в сетевых системах).
Недостатки
дореляционных СУБД:
Сложны в
использовании.
Необходимы
знания о физической организации.
Прикладные
системы зависят от этой организации.
Логика
перегружена деталями организации доступа к БД.