Объектно-реляционная СУБД¶
Объектно-реляционная система управления базами данных (ОРСУБД) — это система управления базами данных (СУБД), которая поддерживает реляционную модель данных, дополненную объектно-ориентированными возможностями, такими как пользовательские типы данных, наследование, полиморфизм и методы. ОРСУБД занимают промежуточное положение между классическими реляционными СУБД (РСУБД) и объектно-ориентированными СУБД (ООСУБД), стремясь объединить их преимущества: надёжность и универсальность реляционного подхода с гибкостью и выразительностью объектной парадигмы.
¶История
¶Предпосылки возникновения
В 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), которые позволяют хранить множественные значения в одном атрибуте. Это упрощает моделирование связей «один-ко-многим» без создания дополнительных таблиц.
¶Классификация
ОРСУБД можно классифицировать по степени интеграции объектных возможностей:
- Системы с расширениями на уровне ядра: объектные возможности встроены непосредственно в ядро СУБД (например, PostgreSQL, Oracle с опциями Objects).
- Системы с надстройками: объектно-реляционное отображение (ORM) реализуется на уровне промежуточного программного обеспечения, а не в самой СУБД (например, Hibernate, Entity Framework). Такие системы не являются ОРСУБД в строгом смысле, но предоставляют объектный взгляд на реляционные данные.
- Гибридные системы: поддерживают как реляционный, так и объектный интерфейсы, позволяя разработчику выбирать подход (например, 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) |
¶Источники
- Стандарт ISO/IEC 9075:1999 (SQL:1999) — Information technology — Database languages — SQL.
- К. Дж. Дейт. «Введение в системы баз данных», 8-е издание. — М.: Вильямс, 2005. — Глава 26 «Объектно-реляционные системы».
- Документация PostgreSQL: «Chapter 8. Data Types», «Chapter 36. Inheritance».
- Документация Oracle Database: «Object-Relational Developer's Guide».
- Документация IBM Db2: «Object-Relational Mapping».
- Документация Microsoft SQL Server: «CLR User-Defined Types».