Постреляционная СУБД POSTGRES95
Постреляционная СУБД POSTGRES95
СУБД 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_, куда помещаются все
вносимые пользователем изменения
при создании таблиц, типов, функций
и т.д. Между классами установлены
отношения, которые позволяют
связывать различные структуры и
осуществлять внутренние операции
между ними.
[Назад] [Содержание] [Вперед]
|