Представление пользователей об объектно-ориентированном подходе сродни образу слона у слепых из известной притчи - по той точке, где человек соприкоснулся с базой, он о ней и судит.

Разработчики приложений говорят о компонентной модели и различных моделях связи с базами данных, получивших названия Java Database Connectivity и ODBC. Создатели моделей баз данных рассматривают объектные представления и абстрактные типы данных. Администраторы рассуждают о внедрении в базу данных сложных типов информации, таких как аудио и видео. И все упоминают о возможности доступа через Web к содержащей объекты базе данных.

Хотя в этой статье основное внимание уделено системе Oracle8, разрабатываемой Oracle, она - не единственный производитель, предлагающий объектно-реляционные технологии.

Положение на рынке реляционных систем

Компания Informix утверждает, что по функциональным возможностям ее Dynamic Server ненамного отличается от соответствующих продуктов Oracle, хотя Informix по-другому группирует и обозначает эти функции. В базе данных Informix можно создавать абстрактные типы данных, а новые методы встраивать в схему базы.

Sybase также реализует объектно-ориентированные возможности в своей схеме баз данных. Хотя Adaptive Server Enterprise этой компании предлагает лишь некоторые из функций, имеющихся в Oracle8, в последующих версиях эти недостатки будут устранены.

IBM планирует обеспечить те же функциональные возможности в версии DB2, выпуск которой назначен на осень, а кроме того, как подчеркивают представители компании, DB2 будет поддерживать понятие объектно-ориентированной подстановки, при которой в запросах можно объединять данные из таблиц, созданных на основе одних и тех же базовых типов. К примеру, после определения типа адреса благодаря подстановке можно получать доступ ко всем адресам, а не только к размещенным в данной таблице.

Надо сказать, что по уровню объектно-реляционной поддержки Microsoft SQL Server отстает от других ведущих реляционных баз данных. Пока Microsoft предлагает только OLE DB, способную улучшить доступ объектно-реляционных приложений к реляционным данным из БД любого производителя.

Подход Computer Associates к объектно-реляционной технологии отличается от решений других производителей. CA предлагает Jasmine, объектно-ориентированную базу данных, дополняющую ее РСУБД Ingress. Система Jasmine работает как объектная кэш-память, которая обеспечивает доступ объектно-ориентированных приложений к реляционным данным, как если бы эти данные были объектами. Эта стратегия призвана свести на нет противоречия между реляционными данными и объектно-ориентированными приложениями.

Промежуточные продукты и не только

Продукт O2, выпускаемый не очень крупной компанией Ardent Software, представляет собой полнофункциональную объектно-ориентированную базу данных. Эта система может ликвидировать разрыв между объектно-ориентированными приложениями и реляционными базами данных за счет обеспечения стандартного интерфейса, предлагаемого Object Data Management Group для традиционных реляционных баз данных. И хотя объектно-ориентированные базы данных не столь распространены, как их реляционные аналоги, эта модель приобретает все большее значение. Ее популярности немало способствуют предложения Objectivity, Poet и Versant. Возможно, для тщательного моделирования сложных связей в базе данных более всего подходит именно объектно-ориентированная база данных.

Объектный инструментарий для сторонников СУБД

Когда на стабильном технологическом рынке появляются новые решения, почти всегда между зарождением технологии и ее широким распространением среди производителей проходит немало времени. Появление объектно-реляционной технологии в мире реляционных БД не было исключением.

Во время исследований и тестирования, проводимых при подготовке этого обзора, мы пришли к выводу, что объектная технология Oracle8 неодинаково поддерживается в системах других производителей. Однако в целом производители уделяют этому вопросу все больше внимания, и сейчас самое время подумать, не стоит ли подкорректировать планы, связанные с разработкой баз данных.

Oracle предлагает Object Database Designer - расширение к своему продукту Designer/2000, которое может помочь внедрить объектную технологию в архитектуру баз данных. Компания планирует в этом году добавить ряд новых объектных функций в систему Designer/2000.

Начиная с версии Enterprise Manager 8.0.4 в администраторе схемы поддерживаются возможности создания объектов. Знакомство с объектными функциональными возможностями Oracle8 лучше всего начинать с графического пользовательского интерфейса и некоторых экспертов для создания типов объектов в Enterprise Manager.

Независимые компании не остаются в стороне и тоже ориентируются на объектные решения Oracle. К примеру, независимая компания Rational Software предлагает Rational Rose 98 - инструментарий проектирования баз данных, который поддерживает объектную функциональность Oracle8 для обратного проектирования существующих, а также создания новых баз данных. Powerbuilder 6 компании Sybase также позволяет работать с объектами в Oracle8.

Во время тестирования для создания фрагментов SQL-кода мы использовали систему SQL Station 3.1 компании Platinum Technology. Хотя сценарии работали на SQL Station безошибочно, сама система иногда не распознает новые ключевые слова, связанные с объектами Oracle8. Кроме того, SQL Station не всегда корректно различает сообщения об ошибках, возвращаемые при создании объектов в базе данных.

Как Java вписывается в объектно-реляционную картину?

Java - это объектно-ориентированный язык. Oracle8 поддерживает объекты. Казалось бы, интеграция Oracle и Java должна быть легкой и бесконфликтной. Но не все так просто. Хотя было бы неплохо, чтобы приложения Java могли обращаться к данным в объектно-реляционной базе данных Oracle8, пока это невозможно. Впрочем, компания планирует в скором времени реализовать эти функции.

Java Database Connectivity (JDBC) 1.0 - наиболее распространенное инструментальное средство для связи приложений Java и реляционных баз данных. Как и в случае с ODBC, для JDBC компания Oracle выпустила драйвер доступа к базе данных.

Oracle предлагает как толстый, так и тонкий канал связи JDBC со своей базой данных. «Толстый» JDBC требует, чтобы на клиенте был установлен SQLNet, но при этом обеспечивает дополнительные функциональные возможности. «Тонкая» версия приносит некоторые функции в жертву Java-реализации SQLNet, однако не требует устанавливать на клиенте дополнительное ПО. Oracle также предлагает SQLJ, который может скрыть от разработчиков сложности управления JDBC.

Все на поддержку объектов!

По иронии судьбы JDBC 1.0 не поддерживает объектные расширения в Oracle8. Хотя это и неприятно, но неудивительно, учитывая быструю эволюцию Java, различия по времени между модернизациями Oracle и Java, а также разные подходы к объектной технологии, которых придерживаются ведущие производители баз данных.

Однако начиная с Oracle8.1 и JDBC 2.0, выпуск которых запланирован на четвертый квартал, компания намерена предложить пользователям поддержку объектных расширений, благодаря чему разработчики Java смогут на новом уровне использовать объектно-реляционные функции Oracle8.

В Oracle8.1 виртуальную машину Java планируется добавить в ядро базы данных, что обеспечит дополнительную гибкость для связи Java и Oracle. К примеру, можно будет использовать процедуры хранения Java, то есть не оставаться привязанным исключительно к PL/SQL. Кроме того, разработчики смогут писать на Java методы, используемые в типах объектов Oracle.

Наличие виртуальной машины Java в базе данных Oracle также будет означать, что приложения Java могут распространяться на любом уровне n-уровневой архитектуры, используя Oracle в качестве серверного хранилища данных.

Некоторые независимые производители тоже предлагают инструментарий JDBC. Компания Ardent Software, к примеру, обеспечивает интерфейс ядра реляционных баз данных, соответствующий спецификациям Object Data Management Group. Учитывая, что другие производители баз данных в той или иной степени добавляют поддержку Java, этот интерфейс имеет блестящее будущее в мире БД.


Объектно-реляционная технология в Oracle8

Каждый из производителей различных баз данных по-своему понимает, что такое объектно-реляционная технология. Реализация этой технологии в Oracle8 включает в себя абстрактные типы данных, представления объектов и наборы информации. Эти возможности позволяют разработчикам использовать преимущества объектно-ориентированной технологии в схеме реляционной базы данных.

Абстрактные типы данных

  
Oracle8 позволяет разработчикам создавать типы данных на основе одного или нескольких подтипов. К примеру, вместо того, чтобы включать все компоненты адреса в каждую из таблиц, содержащих это поле, разработчик может создать абстрактный тип данных «Адрес» и использовать его в тех случаях, когда необходима эта информация.

Представления объектов

Разработчик может или создать таблицу непосредственно из типов объектов, определенных в Oracle8, или создать представления на основе типов объектов и составляющих их реляционных данных. Такой подход упрощает использование объектных функциональных возможностей, таких как методы, в существующих схемах реляционных баз данных.

Объединения

Объединения в Oracle8 позволяют разработчикам хранить связи один-ко-многим в единой таблице. Список номеров телефонов, к примеру, может храниться в таблице или как вложенные таблицы, или как массивы переменной длины. Вложенные таблицы позволяют хранить неограниченное число записей; массивы переменной длины по размеру ограничены.

Вложенные таблицы

Фамилия Имя Номера телефонов
Ду Джон 8675309
5551212
Смит Мэри 3486738
3853867
4851847
Вложенные таблицы используются в тех случаях, когда в объединении необходимо хранить неопределенное число записей. Кроме того, они применяются, когда необходимо обращаться к каждому из членов объединения.
Используются для запросов типа:
Какой у Джона второй номер телефона?

Массивы переменной длины

Фамилия Имя Номера телефонов
Ду Джон 8675309
5551212
Смит Мэри 3486738
3853867
Массивы переменной длины полезны, если известно число записей, которые нужно хранить в объединении. Они также применяются, когда не предполагается поддерживать запросы к каждой из записей объединения.
Используются для запросов типа:
Какие у Мэри номера телефонов?