Открыть сервисСервис

Объектно-реляционная СУБД

Объектно-реляционная система управления базами данных (ОРСУБД) — это система управления базами данных (СУБД), которая поддерживает реляционную модель данных, дополненную объектно-ориентированными возможностями, такими как пользовательские типы данных, наследование, полиморфизм и методы. ОРСУБД занимают промежуточное положение между классическими реляционными СУБД (РСУБД) и объектно-ориентированными СУБД (ООСУБД), стремясь объединить их преимущества: надёжность и универсальность реляционного подхода с гибкостью и выразительностью объектной парадигмы.

История

Предпосылки возникновения

В 1980-х годах реляционные СУБД доминировали на рынке, обеспечивая эффективное хранение и обработку структурированных данных. Однако с развитием приложений для автоматизированного проектирования (CAD), геоинформационных систем (ГИС) и мультимедиа возникла потребность в работе со сложными, иерархическими и слабоструктурированными данными, которые плохо укладывались в плоские таблицы реляционной модели. Объектно-ориентированные базы данных, появившиеся в это же время, предлагали естественное представление таких данных, но страдали от отсутствия стандартизации, слабой поддержки запросов и меньшей зрелости по сравнению с реляционными системами.

Развитие стандарта SQL

Ключевым шагом к появлению ОРСУБД стало расширение стандарта SQL. В 1999 году Международная организация по стандартизации (ISO) приняла стандарт SQL:1999 (также известный как SQL3), который ввёл в язык SQL объектно-ориентированные конструкции:

  • Пользовательские типы данных (UDT): возможность определять собственные типы, включая структурированные (с атрибутами) и абстрактные (с методами).
  • Типы-объекты: типы, экземпляры которых могут храниться в таблицах.
  • Наследование типов: возможность создания иерархий типов.
  • Ссылочные типы (REF): указатели на строки таблиц, позволяющие моделировать связи между объектами.
  • Методы: функции, привязанные к определённому типу данных.

Этот стандарт заложил основу для реализации объектно-реляционных возможностей в коммерческих СУБД.

Коммерческие реализации

Первыми крупными коммерческими ОРСУБД стали системы, разработанные на базе существующих реляционных ядер:

  • PostgreSQL (изначально Postgres, 1986 год) — одна из первых систем, реализовавшая концепцию «отношений с наследованием» и пользовательские типы. К 1990-м годам она приобрела многие черты ОРСУБД.
  • Oracle Database (начиная с версии 8i, 1999 год) — внедрила объектно-реляционные расширения, включая типы объектов, таблицы объектов и ссылки.
  • IBM DB2 (версия 7, 1999 год) — также добавила поддержку объектных типов и методов.
  • Microsoft SQL Server (начиная с версии 2005) — ввёл поддержку пользовательских типов данных (CLR UDT) и методов на платформе .NET.

Архитектура и ключевые особенности

Реляционная основа

ОРСУБД сохраняют все основные принципы реляционной модели: данные хранятся в таблицах (отношениях), состоящих из строк (кортежей) и столбцов (атрибутов). Система поддерживает язык SQL, транзакции (свойства ACID), целостность данных (первичные и внешние ключи) и индексы для ускорения запросов.

Объектно-ориентированные расширения

ОРСУБД добавляют в реляционную модель следующие возможности:

Пользовательские типы данных (UDT)

Пользователь может определить собственный тип данных, который может быть:

  • Простым (distinct type): базируется на встроенном типе, но имеет собственное имя и семантику (например, CREATE TYPE money AS NUMERIC(10,2)).
  • Структурированным (structured type): состоит из нескольких атрибутов и может иметь методы (например, CREATE TYPE address AS (street TEXT, city TEXT, zip TEXT)). Структурированный тип может быть использован как тип столбца таблицы или как тип строки.

Типы-объекты и таблицы объектов

Тип-объект (object type) — это структурированный тип, экземпляры которого могут быть сохранены в таблице. Таблица объектов (object table) — это таблица, каждая строка которой является экземпляром определённого типа-объекта. Например: ``sql CREATE TYPE person_t AS OBJECT ( name VARCHAR(100), birth_date DATE, MEMBER FUNCTION age RETURN NUMBER ); CREATE TABLE persons OF person_t; ``

Наследование типов

Типы могут наследовать атрибуты и методы от родительских типов. Это позволяет моделировать иерархии классов (например, тип employee_t наследует от person_t). В SQL:1999 поддерживается как одиночное, так и множественное наследование (в зависимости от реализации).

Ссылочные типы (REF)

Ссылка (REF) — это указатель на строку в таблице объектов. Она позволяет моделировать ассоциации между объектами без явного использования внешних ключей. Например, тип department_t может содержать атрибут manager REF person_t, указывающий на конкретного сотрудника. REF обеспечивает навигацию по объектам (dereference) в запросах.

Методы и функции

Типы могут содержать методы (функции и процедуры), которые оперируют данными экземпляра. Методы могут быть написаны на SQL, PL/SQL или на внешних языках (например, Java, C#). Они инкапсулируют поведение, связанное с типом.

Коллекции

ОРСУБД поддерживают типы коллекций, такие как массивы (VARRAY) и вложенные таблицы (nested table), которые позволяют хранить множественные значения в одном атрибуте. Это упрощает моделирование связей «один-ко-многим» без создания дополнительных таблиц.

Классификация

ОРСУБД можно классифицировать по степени интеграции объектных возможностей:

  1. Системы с расширениями на уровне ядра: объектные возможности встроены непосредственно в ядро СУБД (например, PostgreSQL, Oracle с опциями Objects).
  2. Системы с надстройками: объектно-реляционное отображение (ORM) реализуется на уровне промежуточного программного обеспечения, а не в самой СУБД (например, Hibernate, Entity Framework). Такие системы не являются ОРСУБД в строгом смысле, но предоставляют объектный взгляд на реляционные данные.
  3. Гибридные системы: поддерживают как реляционный, так и объектный интерфейсы, позволяя разработчику выбирать подход (например, IBM DB2).

Применение

ОРСУБД находят применение в областях, где требуется сочетание сложных структур данных и надёжности реляционного хранения:

  • Геоинформационные системы (ГИС): хранение пространственных объектов (точек, линий, полигонов) с использованием пользовательских типов (например, PostGIS — расширение PostgreSQL).
  • Автоматизированное проектирование (CAD/CAM): управление сложными иерархическими моделями изделий.
  • Медицинские информационные системы: хранение структурированных данных пациентов, результатов анализов и изображений.
  • Финансовые приложения: моделирование сложных финансовых инструментов с наследованием и методами расчёта.
  • Веб-приложения и системы управления контентом (CMS): хранение разнородных данных (статьи, пользователи, комментарии) с возможностью расширения типов.

Преимущества и недостатки

Преимущества

  • Более естественное моделирование: сложные бизнес-сущности могут быть представлены как объекты, что упрощает разработку и поддержку кода.
  • Повторное использование: пользовательские типы и методы могут быть использованы в разных приложениях и запросах.
  • Инкапсуляция: бизнес-логика может быть сосредоточена в методах типов, что повышает целостность данных.
  • Совместимость с SQL: сохраняется мощь реляционного языка запросов, включая соединения, агрегацию и подзапросы.
  • Зрелость и надёжность: ОРСУБД базируются на проверенных реляционных ядрах с поддержкой транзакций и восстановления.

Недостатки

  • Сложность: объектно-реляционные расширения усложняют модель данных и язык SQL, что требует более высокой квалификации разработчиков.
  • Производительность: навигация по ссылкам (REF) и вызовы методов могут быть медленнее, чем эквивалентные реляционные операции с JOIN.
  • Фрагментация реализации: несмотря на стандарт SQL:1999, разные СУБД реализуют объектные возможности по-разному, что затрудняет переносимость кода.
  • Ограниченная поддержка: многие разработчики предпочитают использовать ORM-фреймворки, а не встроенные объектные возможности СУБД, что приводит к меньшей популярности ОРСУБД по сравнению с чисто реляционными системами.

Примеры

  • PostgreSQL: наиболее известная свободная ОРСУБД. Поддерживает пользовательские типы, наследование таблиц, массивы, домены, функции на нескольких языках (PL/pgSQL, PL/Python, PL/Java и др.) и расширения (например, PostGIS).
  • Oracle Database: предоставляет обширный набор объектно-реляционных возможностей, включая типы объектов, таблицы объектов, ссылки, коллекции (VARRAY, вложенные таблицы) и методы на PL/SQL и Java.
  • IBM Db2: поддерживает пользовательские типы, наследование, методы и типизированные таблицы.
  • Microsoft SQL Server: поддерживает пользовательские типы данных (CLR UDT), созданные на платформе .NET, а также методы и свойства.

Сравнение с другими типами СУБД

ХарактеристикаРеляционные СУБД (РСУБД)Объектно-ориентированные СУБД (ООСУБД)Объектно-реляционные СУБД (ОРСУБД)
Модель данныхТаблицы, строки, столбцыОбъекты, классы, наследованиеТаблицы + объектные типы
Язык запросовSQL (стандартизирован)OQL, API языков программированияSQL с объектными расширениями
ЦелостностьВысокая (ACID, ограничения)Средняя (зависит от реализации)Высокая (ACID + объектные ограничения)
Сложность моделированияНизкая для простых данных, высокая для сложныхВысокая для сложных данныхСредняя
ПроизводительностьВысокая для аналитических запросовВысокая для навигационных запросовСредняя (зависит от нагрузки)
ПопулярностьОчень высокаяНизкаяСредняя (в основном через PostgreSQL)

Источники

  1. Стандарт ISO/IEC 9075:1999 (SQL:1999) — Information technology — Database languages — SQL.
  2. К. Дж. Дейт. «Введение в системы баз данных», 8-е издание. — М.: Вильямс, 2005. — Глава 26 «Объектно-реляционные системы».
  3. Документация PostgreSQL: «Chapter 8. Data Types», «Chapter 36. Inheritance».
  4. Документация Oracle Database: «Object-Relational Developer's Guide».
  5. Документация IBM Db2: «Object-Relational Mapping».
  6. Документация Microsoft SQL Server: «CLR User-Defined Types».