Постреляционная СУБД Postgres95
Автор: codenet.ru
СУБД POSTGRES95 была спроектирована и разработана в
Калифорнийском университете г. Беркли под руководством известного
специалиста в области баз данных профессора Стоунбрейкера, который в
1975-1980 гг. создал довольно популярную реляционную СУБД Ingres.
Направление POSTGRES принадлежит к числу так называемых постреляционных
систем - к следующему этапу в развитии реляционных СУБД. В настоящее время
основным предметом критики последних является не их недостаточная
эффективность, а присущая этим системам некоторая ограниченность (прямое
следствие простоты) при использовании в нетрадиционных областях, в которых
требуются предельно сложные структуры данных. Другим, часто отмечаемым
недостатком реляционных баз данных, является невозможность адекватного
отражения семантики предметной области. Поэтому современные исследования в
области постреляционных систем, главным образом, посвящены устранению
именно этих недостатков, и во многом требования к этим системам означают
просто необходимость реализации свойств, отсутствующих в большинстве
текущих реляционных СУБД. В их число, например, входит полнота системы
типов, поддержка иерархии и наследования типов, возможность управления
сложными объектами и т.д. СУБД POSTGRES95, являясь постреляционной
системой, сохраняет основные свойства реяционных СУБД и в то же время
имеет свои, отличные от других, возможности.
СУБД POSTGRES95 поддерживает темпоральную модель хранения
и доступа к данным. То есть для любого объекта данных, созданного в момент
времени t1 и уничтоженного в момент времени t2, в БД сохраняются (и
доступны пользователям) все его состояния во временном интервале (t1,t2).
Обычные же БД хранят мгновенный снимок модели предметной области, и любое
изменение в момент времени t некоторого объекта приводит к недоступности
этого объекта в предыдущий момент времени. Хотя, на самом деле, в
большинстве развитых СУБД предыдущее состояние объекта сохраняется в
журнале изменений, но осуществления доступа со стороны пользователя нет.
В связи с этим, в POSTGRES95 пересмотрен механизм
журнализации изменений, откатов транзакций и восстановления БД после сбоя.
Особенность системы управления памятью заключается в том, что не ведется
обычная журнализация и мгновенно обеспечивается корректное состояние БД с
утратой состояния в оперативной памяти. Также система управления памятью
поддерживает исторические данные, соответствующие возможности работы с
которыми заложены в язык POSTQUEL. Запросы могут содержать выборку данных
в определенное время, в определенном интервале времени. Например,
результатом запроса:
SELECT city, population
FROM cities['epoch','now'] WHERE city='Moscow';
будет являться следующая таблица: city population
Moscow |
7 360 000 |
Moscow |
8 950 000 |
Кроме этого, имеется возможность создавать версии
отношений и допускается их последующая модификация с учетом изменений
основных вариантов.
Основное решение этих аспектов состоит в том, что при
модификации кортежа изменения производятся не на месте его хранения, а
заводится новая запись, куда помещаются измененные поля. Эта запись,
содержащая также и данные, характеризующие транзакцию, производившую
изменения (в том числе и время ее завершения), подшивается в список к
изменявшемуся кортежу.
Одним из основных положений реляционной модели данных
является требование нормализации отношений: поля кортежей могут содержать
лишь атомарные значения. Приведение исходного табличного представления
предметной области к первой нормальной форме является основным шагом в
процессе проектирования реляционной базы данных. В СУБД POSTGRES95
реализована "ненормализованная" реляционная модель данных, которая
допускает хранение в качестве элемента кортежа многомерных массивов
фиксированной и переменной длины, и других данных, в том числе
абстрактных, определенных пользователями типов:
CREATE TABLE salary (name
text,pay_by_quarter int4[ ], schedule char16[ ][ ]);
Это свойство POSTGRES95 сближает ее со свойствами
объектно-ориентированных СУБД, хотя семантические возможности модели
данных POPSTGRES95 существенно слабее.
Язык запросов СУБД POSTGRES95 - POSTQUEL- является
вариантом нового стандарта языка SQL-3. Он имеет операторы для определения
схемы базы данных (CREATE TABLE, ALTER TABLE), манипулирования данными
(UPDATE- заменить, DELETE - удалить, SELECT- выбрать, INSERT- вставить и
др.), операторы управления транзакциями, предоставлений и ограничений
доступа и др. POSTQUEL, кроме этого, предоставляет много дополнительных
возможностей. В их число входят расширенная система типов (кроме обычных
типов int, float, real, smallint, char(N), varcha(N), date, time и др.
реализована возможность создания пользователями произвольного числа своих
типов), поддерживается иерархия и наследование классов, предоставляется
возможность определения собственных функций, операторов и агрегатов. В
таблицах могут храниться данные размером более 8 KB. Это позволяет
осуществлять, так называемый, интерфейс больших объектов (Large Objects
Interface), который применяет файл-ориентированный доступ к данным,
объявленных как тип large. POSTQUEL не поддерживает подзапросы, но они
могут легко быть осуществлены с помощью самостоятельно написанных
SQL-функций.
POSTQUEL поддерживает два типа функций: SQL-функции и
функции, написанные на языке программирования, например, на Си. Кроме
функций, пользователь может создавать свои агрегаты и операторы.
POSTGRES95 позволяет легко вводить новые структуры, используя не
физическую, а логическую модель хранения данных. В системных каталогах
POSTGRES95, в отличие от стандартных реляционных систем, хранится
информация не только об отношениях и атрибутах, но также и информация о
типах, функциях, методах доступа и т.п. В POSTGRES95 системные каталоги
представлены следующими классами: pg_database - базы данных; pg_class -
отношения; pg_attribut - атрибуты; pg_proc - процедуры (и на Си, и на
SQL); pg_type - типы; pg_aggregate - функции и агрегаты; и др. Каждый
класс располагается в файле с соответствующим именем, которое начинается с
pg_, куда помещаются все вносимые пользователем изменения при создании
таблиц, типов, функций и т.д. Между классами установлены отношения,
которые позволяют связывать различные структуры и осуществлять внутренние
операции между ними.