Лабораторная 1. Создание локальной базы данных в Caché
Постреляционная СУБД Caché
Основные положения стандарта ODMG
Объектно-ориентированные СУБД (ООСУБД) отличает ряд обязательных свойств.
Эти свойства продекларированы в «Манифесте систем объектно-ориентированных баз данных», а впоследствии закреплены в документах ODMG (Object Data Management Group), организации, объединяющей ведущих производителей объектно-ориентированных СУБД. Основной целью эта организация ставит задачу выработки единых стандартов ООСУБД, соблюдение которых обеспечило бы переносимость приложений.
Рассмотрим основные положения стандарта ODMG.
Модель данных
В соответствии со стандартом ODMG 2.0 объектная модель данных характеризуется следующими свойствами.
• Базовыми примитивами являются объекты и литералы. Каждый объект имеет уникальный идентификатор, литерал не имеет идентификатора.
• Объекты и литералы различаются по типу. Состояние объекта характеризуется его свойствами, поведение объекта характеризуется его методами (операциями). Все объекты одного типа имеют одинаковое поведение (набор операций) и одинаковый диапазон изменения свойств.
• Свойствами могут быть атрибуты объекта или связи между объектом и одним или несколькими другими объектами.
• Поведение объекта определяется набором операций, которые могут быть выполнены над объектом или самим объектом. Операции могут иметь список входных и выходных параметров строго определенного типа. Каждая операция может также возвращать типизированный результат.
• База данных хранит объекты, позволяя совместно использовать их различным пользователям и приложениям. База данных основана на схеме данных, определяемой языком определения данных, и содержит экземпляры типов, определенных схемой.
Тип также является объектом. Поддерживается иерархия супертипов и подтипов, реализуя тем самым стандартный механизм объектно-ориентированного программирования — наследование. Тип имеет набор свойств, а объект характеризуется состоянием в зависимости от значения каждого свойства. Операции, определяющие поведение типа, едины для всех объектов одного типа. Свойство едино для всего типа, а все объекты типа также имеют одинаковый набор свойств. Значение свойства относится к конкретному объекту.
На рис. схематично изображены основные элементы ООСУБД.
Рисунок Основные элементы ООСУБД
Идентификатор объекта
Как следует из модели данных, каждый объект в базе данных уникален. Существует несколько подходов для идентификации объекта.
Первый самый простой — объекту присваивается уникальный номер (OID — object identificator) в базе, который никогда больше не повторяется, даже если предыдущий объект с таким номером уже удален. Недостаток такого подхода состоит в невозможности перенести объекты в другую базу без потери связности между ними.
Второй подход состоит в использовании составного идентификатора. Например, в ООСУБД Versant идентификатор OID имеет формат xxxxxxxx:yyyyyyyy, где xxxxxxxx — идентификатор базы данных, yyyyyyyy — идентификатор объекта в базе. Составленный таким образом OID позволяет переносить объекты из базы в базу без потери связи между объектами или без удаления объектов с перекрывающими номерами.
Третий подход, который применяется в ООСУБД Jasmine и Caché, состоит в том, что OID формируется из имени класса объекта и собственно номера объекта. Идентификатор имеет вид classnamexxxxxxxx, где classname — имя класса, а xxxxxxxx — номер объекта этого класса. Недостаток такого подхода заключается в том, что проблема переноса объектов не решена олностью. В разных базах могут оказаться объекты одного класса, а уникальность номеров соблюдается только в пределах одной базы. Преимущество подхода — в простоте извлечения объектов нужного класса: объекты одного класса будут иметь идентификатор, имеющий общую часть.
Четвертый вариант, самый лучший, состоит в использовании OID, состоящего из трех частей: номер базы, номер класса, номер объекта. Однако и при этом остается вопрос о том, как обеспечить уникальность номеров баз и классов на глобальном уровне — при использовании ООСУБД на различных платформах, в разных городах и странах.
Новые типы данных
Объектные базы данных имеют возможность создания и использования новых типов данных. В этом заключается одно из принципиальных отличий их от реляционных баз данных. Создание нового типа не требует модификации ядра базы и основано на принципах объектно-ориентированного программирования: инкапсуляции, наследовании, перегрузке операций и позднем связывании.
В ООСУБД для объектов, которые предполагается хранить в базе (постоянные объекты), требуется, чтобы их предком был конкретный базовый тип, определяющий все основные операции взаимодействия с сервером баз данных. Концептуально объект характеризуют поведение и состояние. Тип объекта определяется через его поведение, т.е. через операции, которые могут быть выполнены объектом.
Поэтому для создания нового типа необходимо унаследовать свойства любого имеющегося типа, наиболее подходящего по своему поведению и состоянию, добавить новые операции и атрибуты и переопределить, по необходимости, уже существующие.
Пример на рис. иллюстрирует возможность наращивания типа «человек» (Person), который может быть «мужчиной» (MalePerson), «женщиной» (FemalePerson), «взрослым» (Adult) или «ребенком» (Child). Соответственно возможны попарные пересечения этих типов. Каждый из этих типов может иметь свой набор свойств и операций. Любой объект типа MalePerson, FemalePerson, Adult или Child является объектом типа Person. Аналогично объект подтипа MaleAdult, полученного наследованием типов MalePerson и Adult, является человеком, мужского пола, взрослым и, соответственно, может пользоваться свойствами и операциями всех своих супертипов.
Рисунок Пример наследования типов
Оптимизация ядра СУБД
В отличие от объектно-реляционных СУБД, где ядро остается реляционным, а «объектность» реализуется в виде специальной надстройки, ядро ООСУБД оптимизировано для операций с объектами и производит операции кэширования объектов, ведение версий объектов, разделение прав доступа к конкретным объектам.
Поэтому ООСУБД имеет более высокое быстродействие на операциях, требующих доступа и получения данных, упакованных в объекты, по сравнению с реляционными СУБД, для которых необходимость выборки связных данных ведет к выполнению дополнительных внутренних операций.
Язык СУБД и запросы
Варианты языков запросов можно разделить на две группы. Первая объединяет языки, унаследованные от SQL и представляющие собой разновидность OQL (Object Query Language), языка, стандартизованного ODMG. Объектно-реляционные СУБД используют различные варианты ограниченных объектных расширений SQL.
Вторая, сравнительно новая группа языков запросов базируется на XML. Собирательное название языков этой группы — XML QL (или XQL). Они могут применяться в качестве языков запросов в объектных и объектно-реляционных базах данных. Использование в чисто реляционных базах не целесообразно, поскольку языком предусматривается объектная структура запроса.
