Реферат: Однако наиболее активно это направление развивается в последние годы
Объектно-ориентированные базы данных - основные концепции,
организация и управление: краткий обзор
1. Введение
Направление объектно-ориентированных баз данных (ООБД)
возникло сравнительно давно. Публикации появлялись уже в
середине 1980-х (например, [96]). Однако наиболее активно это
направление развивается в последние годы. С каждым годом
увеличивается число публикаций и реализованных коммерческих и
экспериментальных систем.
Возникновение направления ООБД определяется прежде всего
потребностями практики: необходимостью разработки сложных
информационных прикладных систем, для которых технология
предшествующих систем БД не была вполне удовлетворительной.
Конечно, ООБД возникли не на пустом месте. Соответствующий
базис обеспечивают как предыдущие работы в области БД, так и
давно развивающиеся направления языков программирования с
абстрактными типами данных и объектно-ориентированных языков
программирования.
Что касается связи с предыдущими работами в области БД, то на
наш взгляд наиболее сильное влияние на работы в области ООБД
оказывают проработки реляционных СУБД и следующее
хронолигически за ними семейство БД, в которых поддерживается
управление сложными объектами [52-56]. Кроме того,
исключительное влияние на идеи и концепции ООБД и, как
кажется, всего объектно-ориентированного подхода оказал подход
к семантическому моделированию данных (например, [57-59], хотя
общее число публикаций по семантическому моделированию
поистине безгранично). Достаточное влияние оказывают также
развивающиеся параллельно с ООБД направления дедуктивных и
активных БД [10, 42, 82, 84].
Среди языков и систем программирования наибольшее первичное
влияние на ООБД оказал Smalltalk [34, 36]. Этот язык сам по
себе не является полностью поинерским, хотя в нем была введена
новая терминология, являющаяся теперь наиболее
распространенной в объектно-ориентированном программировании.
На самом деле, Smalltalk основан на ряде ранее выдвинутых
концепций. Хороший обзор идей и подходов
объектно-ориентированного программирования представлен,
например, в [3].
Большое число работ не означает, что все проблемы ООБД
полностью решены. Как отмечается в Манифесте группы ведущих
ученых, занимающихся ООБД, [8] современная ситуация с ООБД
напоминает ситуацию с реляционными системами середины 1970-х.
При наличии большого количества экспериментальных проектов (и
даже коммерческих систем) отсутствует общепринятая
объектно-ориентированная модель данных, и не потому, что нет
ни одной разработанной полной модели, а по причине отсутствия
общего согласия о принятии какой-либо модели. На самом деле,
имеются и более конкретные проблемы (например, [5, 7]),
связанные с разработкой декларативных языков запросов,
выполнением и оптимизацией запросов, формулированием и
поддержанием ограничений целостности, синхронизацией доступа и
управлением транзакциями и т.д.
Тематика ООБД очень широка, объем настоящего обзора не
позволяет рассмотреть все вопросы. Тем не менее, мы
постараемся в систематической манере проанализировать наиболее
важные аспекты ООБД (критерии отбора тем и источников
полностью субъективны). Обзор построен по следующему плану:
Первый раздел - настоящее введение. Во втором разделе
излагаются основные понятия объектно-ориентированного подхода
и их специфическое преломление в контексте ООБД. В третьем
разделе рассматриваются основные понятия
объектно-ориентированного моделирования данных. Четвертый
раздел посвящен языкам программирования и языкам запросов
ООБД. В пятом разделе кратко обозреваются характерные
представители объектно-ориентированных СУБД - ORION и O2.
Шестой раздел посвящается проблематике выполнения и
оптимизации запросов к ООБД. В седьмом разделе рассматриваются
вопросы синхронизации доступа и управления транзакциями в
ООБД. Восьмой раздел касается связи ООБД и дедуктивных и
активных БД. Наконец, девятый раздел - краткое заключение.
2. Общие понятия объектно-ориентированного подхода и их
преломление в ООБД
В наиболее общей и классической постановке [11]
объектно-ориентированный подход базируется на концепциях:
- объекта и идентификатора объекта;
- атрибутов и методов;
- классов;
- иерархии и наследования классов.
Любая сущность реального мира в объектно-ориентированных
языках и системах моделируется в виде объекта. Любой объект
при своем создании получает генерируемый системой уникальный
идентификатор, который связан с объектом во все время его
существования и не меняется при изменении состояния объекта.
Каждый объект имеет состояние и поведение. Состояние объекта -
набор значений его атрибутов. Поведение объекта - набор
методов (программный код), оперирующих над состоянием объекта.
Значение атрибута объекта - это тоже некоторый объект или
множество объектов. Состояние и поведение объекта
инкапсулированы в объекте; взаимодействие между объектами
производится на основе передачи сообщений и выполнении
соответствующих методов.
Множество объектов с одним и тем же набором атрибутов и
методов образует класс объектов. Объект должен принадлежать
только одному классу (если не учитывать возможности
наследования, см. следующий абзац). Допускается наличие
примитивных предопределенных классов, объекты-экземляры
которых не имеют атрибутов: целые, строки и т.д. Класс,
объекты которого могут служить значениями атрибута объектов
другого класса, называется доменом этого атрибута.
Допускается порождение нового класса на основе уже
существующего класса - наследование. В этом случае новый
класс, называемый подклассом существующего класса
(суперкласса) наследует все атрибуты и методы суперкласса. В
подклассе, кроме того, могут быть определены дополнительные
атрибуты и методы. Различаются случаи простого и
множественного наследования. В первом случае подкласс может
определяться только на основе одного суперкласса, во втором
случае суперклассов может быть несколько. Если в языке или
системе поддерживается единичное наследование классов, набор
классов образует древовидную иерархию. При поддержании
множественного наследования классы связаны в ориентированный
граф с корнем, называемый решеткой классов. Объект подкласса
считается принадлежащим любому суперклассу этого класса.
Одной из более поздних идей объектно-ориентированного подхода
является идея возможного переопределения атрибутов и методов
суперкласса в подклассе (перегрузки методов). Эта возможность
увеличивает гибкость, но порождает дополнительную проблему:
при комплиляции объектно-ориентированной программы могут быть
неизвестны структура и программный код методов объекта, хотя
его класс (в общем случае - суперкласс) известен. Для
разрешения этой проблемы применяется так называемый метод
позднего связывания, означающий, по сути дела,
интерпретационный режим выполнения программы с распознаванием
деталей реализации объекта во время выполнения посылки
сообщения к нему. Введение некоторых ограничений на способ
определения подклассов позволяет добиться эффективной
реализации без потребностей в интерпретации [97].
Как видно, при таком наборе базовых понятий, если не принимать
во внимание возможности наследования классов и соответствующие
проблемы, объектно-ориентированный подход очень близок к
подходу языков программирования с абстрактными (или
произвольными) типами данных [77].
С другой стороны, если абстрагироваться от поведенческого
аспекта объектов, объектно-ориентированный подход весьма
близок к подходу семантического моделирования данных [58]
(даже и по терминологии). Фундаментальные абстракции, лежащие
в основе семантических моделей, неявно используются и в
объектно-ориентированном подходе. На абстракции агрегации
основывается построение сложных объектов, значениями атрибутов
которых могут быть другие объекты. Абстракция группирования -
основа формирования классов объектов. На абстракциях
специализации/обобщения основано построение иерархии или
решетки классов.
Видимо, наиболее важным новым качеством ООБД, которое
позволяет достичь объектно-ориентированный подход, является
поведенческий аспект объектов. В прикладных информационных
системах, основывавшихся на БД с традиционной организацией
(вплоть до тех, которые базировались на семантических моделях
данных), существовал принципиальный разрыв между структурной и
поведенческой частями. Структурная часть системы
поддерживалась всем аппаратом БД, ее можно было моделировать,
верифицировать и т.д., а поведенческая часть создавалась
изолированно. В частности, отсутвовали формальный аппарат и
системная поддержка совместного моделирования и гарантирования
согласованности этих структурной (статической) и поведенческой
(динамической) частей. В среде ООБД проектирование, разработка
и сопровождение прикладной системы становится процессом, в
котором интегрируются структурный и поведенческий аспекты.
Конечно, для этого нужны специальные языки, позволяющие
определять объекты и создавать на их основе прикладную систему
[70].
Специфика применения объектно-ориентированного подхода для
организации и управления БД потребовала уточненного толкования
классических концепций и некоторого их расширения [6]. Это
определяется потребностями долговременного хранения объектов
во внешней памяти, ассоциативного доступа к объектам,
обеспечения согласованного состояния ООБД в условиях
мультидоступа и тому подобных возможностей, свойственных базам
данных [8]. В [6] выделяются три аспекта, отсутствующие в
традиционной парадигме, но требующиеся в ООБД.
Первый аспект касается потребности в средствах спецификации
знаний при определении класса (ограничений целостности, правил
дедукции и т.п.) Второй аспект - потребность в механизме
определения разного рода семантических связей между объектами
вообще говоря разных классов. Фактически это означает
требование полного распространения на ООБД средств
семантического моделирования данных. Потребность в
использовании абстракции ассоциирования отмечается и в связи с
использовании ООБД в сфере автоматизированного проектирования
и инженерии [66]. Наконец, третий аспект связан с пересмотром
понятия класса. В контексте ООБД оказывается более удобным
рассматривать класс как множество объектов данного типа, т.е.
одновременно поддерживать понятия и типа и класса объектов.
Как мы отмечали во введении, в сообществе исследователей ООБД
и разработчиков систем отсутствует полное согласие, но в
большинстве практических работ используется некоторое
расширение объектно-ориентированного подхода.
3. Объектно-ориентированные модели данных
Первой формализованной и общепризнанной моделью данных была
реляционная модель Кодда [98]. В этой модели, как и во всех
следующих, выделялись три аспекта - структурный, целостный и
манипуляционный. Структуры данных в реляционной модели
основываются на плоских нормализованных отношениях,
ограничения целостности выражаются с помощью средств логики
первого порядка и, наконец, манипулирование данными
осуществляется на основе реляционной алгебры или равносильного
ей реляционного исчисления. Как отмечают многие исследователи,
своим успехом реляционная модель данных во многом обязана
тому, что опиралась на строгий математический аппарат теории
множеств, отношений и логики первого порядка. Разработчики
любой конкретной реляционной системы считали своим долгом
показать соответствие своей конкретной модели данных общей
реляционной модели, которая выступала в качестве меры
"реляционности" системы.
Основные трудности объектно-ориентированного моделирования
данных проистекают из того, что такого развитого
математичекого аппарата, на который могла бы опираться общая
объектно-ориентированная модель данных, не существует. В
большой степени поэтому до сих пор нет базовой
объектно-ориентированной модели. С другой стороны, в [63] со
ссылкой на недоступную нам работу Майера [99] утверждается,
что общая объектно-ориентированная модель данных в
классическом смысле и не может быть определена по причине
непригодности классического понятия модели данных к парадигме
объектной ориентированности.
Не приводя доводов в пользу этого утверждения Майера, но и не
оспаривая его, Беери [63] предлагает в общих чертах формальную
основу ООБД, далеко не полную и не являющуюся моделью данных в
традиционном смысле, но позволяющую исследователям и
разработчикам систем ООБД по крайней мере говорить на одном
языке (если, конечно, предложения Беери будут развиты и
получат поддержку). Независимо от дальнейшей судьбы этих
предложений мы считаем полезным кратко их пересказать.
Во-первых, следуя практике многих ООБД, предлагается выделить
два уровня моделирования объектов: нижний (структурный) и
верхний (поведенческий). На структурном уровне поддерживаются
сложные объекты, их идентификация и разновидности связи "isa".
База данных - это набор элементов данных, связанных
отношениями "входит в класс" или "является атрибутом". Таким
образом, БД может рассматриваться как ориентированный граф.
Важным моментом является поддержание наряду с понятием объекта
понятия значения (позже мы увидим, как много на этом построено
в одной из успешных объектно-ориентированных СУБД O2 [29]).
Важным аспектом является четкое разделение схемы БД и самой
БД. В качестве первичных концепций схемного уровня ООБД
выступают типы и классы. Отмечается, что во всех системах,
использующих только одно понятие (либо тип, либо класс) это
понятие неизбежно перегружено: тип предполагает наличие
некоторого множества значений, определяемого структурой данных
этого типа; класс также предполагает наличие множества
объектов, но это множество определяется пользователем. Таким
образом, типы и классы играют разную роль, и для строгости и
недвусмысленности требуются одновременное поддержание обоих
понятий.
Автор [63] не представляет полной формальной модели
структурного уровня ООБД, но выражает уверенность, что
текущего уровня понимания достаточно, чтобы формализовать
такую модель. Что же касается поведенческого уровня, предложен
только общий подход к требуемому для этого логическому
аппарату (логики первого уровня недостаточно).
Важным, хотя и недостаточно обоснованным предположением Беери
является то, что двух традиционных уровней - схемы и данных
для ООБД недостаточно. Для точного определения ООБД требуется
уровень мета-схемы (см. также [65]), содержимое которой должно
определять виды объектов и связей, допустимых на схемном
уровне БД. Мета-схема должна играть для ООБД такую же роль,
какую играет структурная часть реляционной модели данных для
схем реляционых баз данных.
Имеется достаточное количество других публикаций, отноcящихся
к теме объектно-ориентированных моделей данных [61-62, 64,
65-68], но они либо затрагивают достаточно частные вопросы,
либо используют слишком серьезный для этого обзора
математический аппарат (к числу последних относится работа
Леллани и Спиратоса [68], в которой объектно-ориентированная
модель данных определяется на основе теории категорий).
Для иллюстрации текущего положения дел мы кратко рассмотрим
особенности конкретной модели данных, применяемой в
объектно-ориентированной СУБД O2 [29, 32] (это, конечно, тоже
не модель данных в классическом смысле).
В O2 поддерживаются объекты и значения. Объект - это пара
(идентификатор, значение), причем объекты инкапсулированы,
т.е. их значения доступны только через методы - процедуры,
привязанные к объектам. Значения могут быть атомарными или
структурными. Структурные значения строятся из значений или
объектов, представленных своими идентификаторами, с помощью
конструкторов множеств, кортежей и списков. Элементы
структурных значений доступны с помощью предопределенных
операций (примитивов).
Возможны два вида организации данных: классы, экземплярами
которых являются объекты, инкапсулирующие данные и поведение,
и типы, экземплярами которых являются значения. Каждому классу
сопоставляется тип, описывающий структуру экземпляров класса.
Типы определяются рекурсивно на основе атомарных типов и ранее
определенных типов и классов с применением конструкторов.
Поведенческая сторона класса определяется набором методов.
Объекты и значения могут быть именованными. С именованием
объекта или значения связана долговременность его хранения
(persistency): любые именованные объекты или значения
долговременны; любые объект или значение, входящие как часть в
другой именованный объект или значение, долговременны.
С помощью специального указания, задаваемого при определении
класса, можно добиться долговременности хранения любого
объекта этого класса. В этом случае система автоматически
порождает значение-множество, имя которого совпадает с именем
класса. В этом множестве гарантированно содержатся все объекты
данного класса.
Метод - программный код, привязанный к конкретному классу и
применимый к объектам этого класса. Определение метода в O2
производится в два этапа. Сначала объявляется сигнатура
метода, т.е. его имя, класс, типы или классы аргументов и тип
или класс результата. Методы могут быть публичными (доступными
из объектов других классов) или приватными (доступными только
внутри данного класса). На втором этапе определяется
реализация класса на одном из языков программирования O2
(подробнее языки обсуждаются в следующем разделе нашего
обзора).
В модели O2 поддерживается множественное наследование классов
на основе отношения супертип/подтип. В подклассе допускается
добавление и/или переопределение атрибутов и методов.
Возможные при множественном наследовании двусмысленности (по
именованию атрибутов и методов) разрешаются либо путем
переименования, либо путем явного указания источника
наследования. Объект подкласса является объектом каждого
суперкласса, на основе которого порожден данный подкласс.
Поддерживается предопределенный класс "Оbject", являющийся
корнем решетки классов; любой другой класс является неявным
наследником класса "Object" и наследует предопределенные
методы ("is_same", "is_value_equal" и т.д.).
Специфической особенностью модели O2 является возможность
объявления дополнительных "исключительных" атрибутов и методов
для именованных объектов. Это означает, что конкретный
именованный объект-представитель класса может обладать типом,
являющимся подтипом типа класса. Конечно, с такими атрибутами
не работают стандартные методы класса, но специально для
именованного объекта могут быть определены дополнительные (или
переопределены стандартные) методы, для которых дополнительные
атрибуты уже доступны. Подчеркивается, что дополнительные
атрибуты и методы привязываются не к конкретному объекту, а к
имени, за которым в разные моменты времени могут стоять вообще
говоря разные объекты. Для реализации исключительных атрибутов
и методов требуется развитие техники позднего связывания.
В [29] приводится достаточно формализованное описание модели
O2, мы для простоты изложения и понимания следовали [32], где
модель описывается на содержательном уровне. В следующем
разделе мы среди прочего рассмотрим особенности языков
программирования и запросов системы O2, которые, конечно,
тесно связаны со спецификой модели данных.
4. Языки программирования систем ООБД и языки запросов
Как отмечают многие исследователи и разработчики (например,
[8, 70]), объектно-ориентированная система БД представляет
собой объединение системы программирования и СУБД
(альтернативная, но не более проясняющая суть дела точка
зрения состоит в том, что объектно-ориентированная СУБД - это
СУБД, основанная на объектно-ориентированной модели данных
[8]).
Мы уже говорили, что основная практическая надобность в ООБД
связана с потребностью в некоторой интегрированной среде
построения сложных информационных систем. В этой среде должны
отсутствовать противоречия между структурной и поведенческой
частями проекта и должно поддерживаться эффективное управление
сложными структурами данных во внешней памяти. С этой точки
зрения языковая среда ООБД - это объектно-ориентированная
система программирования, естественно включающая средства
работы с долговременными объектами. "Естественность" включения
средств работы с БД в язык программирования означает, что
работа с долговременными (хранимыми во внешней БД) объектами
должна происходить на основе тех же синтаксических конструкций
(и с той же семантикой), что и работа со временными,
существующими только во время работы программы объектами.
Эта сторона ООБД наиболее близка родственному направлению
языков программирования БД [77]. Языки программирования ООБД и
БД во многих своих чертах различаются только терминологически;
существенным отличием является лишь поддержание в языках
первого класса подхода к наследованию классов. Кроме того,
языки второго класса, как правило, более развиты как в
отношении системы типов, так и в отношении управляющих
конструкций.
Другим аспектом языкового окружения ООБД является потребность
в языках запросов, которые можно было бы использовать в
интерактивном режиме. Если доступ к объектам внешней БД в
языках программирования ООБД носит в основном навигационный
характер, то для языков запросов более удобен декларативный
стиль. Декларативные языки запросов к ООБД менее развиты, чем
языки программирования ООБД, и при их реализации возникают
существенные проблемы. Ниже мы рассмотрим имеющиеся подходы и
их ограничения более подробно. Но начнем с языков
программирования ООБД.
К моменту написания данного обзора нам неизвестен какой-либо
язык программирования ООБД, который был бы спроектирован
целиком заново, начиная с нуля. Естественным подходом к
построению такого языка было использование (с необходимыми
расширениями) некоторого существующего
объектно-ориентированного языка. Начало расцвета направления
ООБД совпало с пиком популярности языка Smalltalk-80. Этот
язык оказал большое влияние на разработку первых систем ООБД,
и, в частности, использовался в качестве языка
программирования [34, 36]. Во многом опирается на Smalltalk и
известная коммерчески доступная система GemStone [22-24].
Трудности с эффективной практической реализацией языка
Smalltalk побудили разработчиков систем ООБД к поиску
альтернативных базовых языков. Известная близость
объектно-ориентированного и функционального подходов к
программированию позволяет достаточно успешно опираться на
функциональные языки программирования. В частности, язык Лисп
(Common Lisp) является основой проекта ORION [17]. В этом
проекте Лисп является и инструментальным языком, и базой
объектно-ориентированного языка программирования в среде
ORION.
Потребности в еще более эффективной реализации заставляют
использовать в качестве основы объектно-ориентированного языка
языки более низкого уровня. Например, в системе VBASE [24]
наряду со специально разработанным языком TDL, предназначенным
для определения типов, используется объектно-ориентированное
расширение языка Си - COP (C Object Processor). В уже
упоминавшемся проекте O2 [29-32] наряду с функциональным
объектно-ориентированным языком программирования [41]
используются два объектно-ориентированных расширения языков
Бейсик и Си. При этом, насколько можно судить по публикациям,
наибольшее распространение среди пользователей этой системы
(она уже коммерчески доступна) получил язык CO2, являющийся
расширением языка Си. Возможно это связано лишь с широкой (и
все более возрастающей) популярностью языка Си (и его
объектно-ориентированного потомка Си++), ставшего поистине
девизом "настоящих программистов". Может быть, причины более
глубинны (например, языки более высокого уровня слишком
ограничительны для программистов-профессионалов; недаром
большинство современных реализаций языков более высокого
уровня выполняются именно на языке Си). Тем не менее,
современная ситуация именно такова, и мы считаем полезным
привести краткое описание основных особенностей языка CO2
[31-32, 70].
Прежде всего, CO2 не является полностью самостоятельным
языком. Этот язык входит во многоязыковую среду O2 и
предназначен для программирования методов ранее определенных
классов. Определение классов, сигнатур методов (фактически,
прототипов функций в терминологии языка Си) и имен постоянно
хранимых значений и объектов производится с использованием
отдельного языка определения схемы БД.
Имя любого объекта трактуется как указатель на значение этого
объекта; разименование производится с помощью обычного
оператора Си '*'. Доступ к значению объекта возможен только из
метода его класса, если только при перечислении методов
оператор '*' не объявлен явно публичным.
Поддерживается операция порождения нового объекта указанного
класса. В отличие от языка Си++ в CO2 невозможно совместить
создание нового объекта с его инициализаций (понятие
метода-конструктора начального значения объекта в CO2 не
поддерживается). Для инициализации необходимо либо явно
обратиться к соответствующему методу класса с указанием вновь
созданного объекта (поддерживается соответствующий механизм
"передачи сообщений", означающий на самом деле вызов функции),
либо воспользоваться оператором '*' и явно присвоить новое
значение, если '*' - публичный оператор для данного класса.
CO2 включает средства конструирования значений-кортежей,
множеств, и списков. Понятие значения-кортежа фактически
эквивалентно понятию значения-структуры обычного языка Си (с
тем отличием, что элементами кортежа могут являться объекты,
множества и списки). Для значений-множеств и списков
поддерживаются операции добавления и изъятия элементов, а
также набор теоретико-множественных операций (и конкатенации
для списков).
Основой манипулирования объектами, хранимыми в БД, является
расширенное по сравнению с языком Си средство итерации.
Итератор применим к значениям-множествам или спискам.
Фактически он означает последовательное применение
оператора-тела цикла ко всем элементам множества или списка.
Если мы вспомним, что долговременно хранимому классу объектов
неявно соответствут одноименное значение-множество с
элементами-объектами данного класса, то становится понятно,
что итератор языка CO2 обеспечивает явную навигацию в классах
объектов. Единственное, что остается от привычных
пользователям СУБД языков запросов, - это ограниченная
возможность указания характеристик требуемых в цикле объектов
(это делается путем использования оператора разименования и
явного указания условий на атрибуты; конечно, для этого нужно,
чтобы оператор '*' был объявлен публичным в данном классе).
Разработчики O2 подчеркивают, что они умышленно сделали CO2
более бедным по возможностям, чем, например, язык Си++, потому
что многое по части управления объектами берет на себя общий
менеджер объектов системы, явно вызываемый из рабочей
программы.
Потребность в поддержании в объектно-ориентированной СУБД не
только языка (или семейства языков) программирования ООБД, но
и развитого языка запросов в настоящее время осознается
практически всеми разработчиками. Система должна поддерживать
легко осваиваемый интерфейс, прямо доступный конечному
пользователю в интерактивном режиме. Один из подходов
основывается на поддержании обходчиков [73]. В этом случае
конечный интерфейс обычно является графическим. На экране
отображается схема (или подсхема) ООБД, и пользователь
осуществляет доступ к объектам в навигационном стиле. По
мнению Бансилона [70] в этом случае разумно игнорировать
принцип инкапсуляции объектов и предъявлять пользователю
внутренность объектов. В большинстве существующих систем ООБД
подобный интерфейс существует, но всем понятно, что
навигационный язык запросов - это в некотором смысле шаг назад
по сравнению с языками запросов даже реляционных систем.
Ведутся активные поиски подходов к организации декларативных
языков запросов к ООБД.
Беери [63] отмечает существование трех подходов. Первый подход
- языки, являющиеся объектно-ориентированными расширениями
языков запросов реляционных систем. Наиболее распространены
языки с синтаксисом, близким к известному языку SQL [100]. Это
связано, конечно, с общим признанием и чрезвычайно широким
распространением этого языка. В частности, в своем Манифесте
третьего поколения [9] СУБД М. Стоунбрекер и его коллеги по
комитету перспективных систем БД утверждают необходимость
поддержания SQL-подобного интерфейса во всех СУБД следующего
поколения.
Второй подход основывается на построении полного логического
объектно-ориентированного исчисления. По поводу построения
такого исчисления имеются теоретические работы (например,
[101]), но законченный и практически реализованный язык
запросов нам неизвестен. Видимо, к этому же направлению строго
теоретически обоснованных языков запросов можно отнести и
работу Леллани и Спиратоса [68], основанную на алгебраической
теории категорий.
Наконец, третий подход основывается на применении дедуктивного
подхода. В основном это отражает стремление разработчиков к
сближению направлений дедуктивных и объектно-ориентированных
БД. Примером простого дедуктивного объектно-ориентированного
языка запросов может служить [82].
Независимо от применяемого для разработки языка запросов
подхода перед разработчиками встает одна концептуальная
проблема, решение которой не укладывается в традиционное русло
объектно-ориентированного подхода. Понятно, что основой для
формулирования запроса должен служить класс, представляющий в
ООБД множество однотипных объектов. Но что может представлять
собой результат запроса? Набор основных понятий
объектно-ориентированного подхода не содержит подходящего к
данному случаю понятия. Обычно из положения выходят, расширяя
базовый набор концепций концепцией множества объектов и
полагая, что результатом запроса является некоторое
подмножество объектов-экземпляров класса. Это довольно
ограничительный подход, поскольку автоматически исключает
возможность наличия в языке запросов средств, аналогичных
реляционному оператору соединения. В конце этого раздела мы
коротко изложим собственные (в достаточной степени
предварительные) соображения по этому поводу, но сначала
кратко рассмотрим особенности нескольких конкретных
декларативных языков запросов к ООБД.
В языке запросов объектно-ориентированной СУБД ORION [11, 71]
полностью поддерживается принцип инкапсуляции объектов. В
реализованном варианте языка запросы могут основываться только
на одном классе (хотя в [71] описывается подход к определению
запроса на нескольких классах в стиле расширения семантики
реляционного оператора соединения). Синтаксис языка
ориентирован на SQL. Очень развит набор допустимых предикатов
селекции. В частности, для атрибута, доменом которого является
суперкласс, можно указать имя интересующего пользователя
подкласса.
Язык запросов системы Iris [8, 20] находится в значительной
степени под влиянием реляционной парадигмы. Даже название
этого языка OSQL отражает его тесную связь с реляционным
языком SQL. По сути дела, OSQL - это реляционный язык,
расчитанный на работу с ненормализованными отношениями.
Естественно, при таком подходе в OSQL нарушается инкапсуляция
объектов.
На наш взгляд, особый интерес представляет декларативный язык
запросов системы O2 RELOOP [74]. В общих словах, это
декларативный язык запросов с SQL-ориентированным синтаксисом,
основанный на специально разработанной для модели O2 алгебре
объектов и значений. (Кстати, это не единственная работа в
направлении построения алгебры для объектно-ориентированных
моделей данных. См., например, [76].) На наш взгляд, особенно
впечатляющим качеством языка RELOOP является естественность
его построения в общем контексте модели O2. Запрос задается
всегда на значении-множестве или списке. Если мы вспомним, что
долговременному классу в O2 соответствует одноименное
значение-множество, то тем самым можно определить запрос на
любом хранимом классе. Результатом запроса может являться
объект, значение-множество или значение-список. При этом
элементами значений-множеств могут являться объекты (простая
выборка), либо значения-кортежи с элементами-объектами разных
классов (например). В совокупности эти особенности языка
позволяют формулировать запросы над несколькими классами
(специфическое соединение, порождающее не новые объекты, а
кортежи из существующих объектов), а также употреблять
вложенные подзапросы.
Теперь кратко остановимся на собственных предложениях. Суть их
состоит в том, чтобы попытаться построить алгебру классов
объектов, оставаясь в пределах базового набора концепций
объектно-ориентированного подхода. Для этого достаточно, чтобы
была возможность интерпретации результата выполнения
алгебраической операции над классами в виде класса.
еще рефераты
Еще работы по разное
Реферат по разное
Мои первые стихи
17 Сентября 2013
Реферат по разное
Литмонтаж «8 марта в школе»
17 Сентября 2013
Реферат по разное
1. я благодарна бабушке за её теплоту, за то, что она растила, воспитывала меня. Она научила верить в себя, не унывать. Спасибо ей за то, что она любит меня такой, какая я есть
17 Сентября 2013
Реферат по разное
Ясогласен с тем, что люди уходят от нас неузнанными. Вот и мама ушла, и уже нет рядом ее голоса, ее чудесной улыбки нет ее
17 Сентября 2013