Ведущими специалистами в области СУБД было предложено три манифеста баз данных. Все эти манифесты предлагают включить в СУБД поддержку объектно-ориентированной парадигмы (ООП). Первый манифест соответствует объектно-ориентированным БД, второй стремиться сохранить SQL, добавив в него поддержку ООП – объектно-реляционные СУБД, третий манифест призывает сохранить реляционную парадигму путем отказа от языка SQL. При этом ООП и реляционная парадигма должны применяться совместно, но быть ортогональными (например, данные хранятся в РБД, но доступ к ним производится через объектно-ориентированную надстройку). Подробнее о трех манифестах БД см. [2].
Сформирована по второму манифесту БД (Стоунбрейкер и др.) и соответствует направлению объектно-реляционных БД. Включает два основных отличительных компонента – структурные определяемые пользователями типы данных (User Defined Type – UDT) и типизированные таблицы (Typed Table). Первый компонент позволяет определять новые типы данных, которые могут быть гораздо более сложными, чем встроенные типы данных языка SQL. При определении структурного UDT требуется специфицировать не только содержащиеся в нем элементы данных, но и семантику типа данных, т.е. его поведение на основе интерфейса вызовов методов. Второй компонент – типизированные таблицы – позволяет определять таблицы, строки которых являются экземплярами (или значениями) UDT, с которым явно ассоциируется таблица. UDT образуют иерархию наследования, типизированные таблицы также образуют иерархию наследования, взаимосвязанную с иерархией UDT.
Дополнения к SQL в соответствии с объектной моделью:
Массивы, например: INTEGER ARRAY [10]
Анонимный строчный тип– это конструктор типов, позволяющий производить безымянные типы строк (кортежей). Любой возможный строчный тип получается путем использования ROW . При определении столбца, значения которого должны принадлежать некоторому строчному типу, используется конструкция ROW ( fld 1 , fld 2 , …, fld n) , где каждый элемент fldi , определяющий поле строчного типа, задается в виде тройки fldname - название , fldtype - тип, fldoptions - опции.
индивидуальные UDT- аналог доменов, призванный их заменить – типы, определенные на одном базовом типе.
Примеры запросов, демонстрирующие возможности объектного расширения SQL для БД «Работники-Отделы-Проекты», приведены на Лист. 54 - Лист. 60.
SELECT EMP_NAME FROM EMP WHERE CAST(EMP_ID TO INTEGER) > CAST(DEPT_ID TO INTEGER) ;
Лист. 55. Типизированные таблицы
CREATE TYPE EMP_T AS ( EMP_NAME VARCHAR(20), EMP_BDATE DATE, EMP_SAL SALARY, DEPT REF (DEPT) ) INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED INSTANCE METHOD age () RETURNS DECIMAL (3,1)
CREATE TYPE PROGRAMMER_T UNDER EMP_T AS ( PROG_LANG VARCHAR (10) ) INSTANTIABLE NOT FINAL
CREATE TYPE DEPT_T AS ( DEPT_NO INTEGER, DEPT_NAME VARCHAR(200), DEPT_MNG REF (EMP) )
INSTANTIABLE NOT FINAL
CREATE TABLE EMP OF EMP_T ( REF IS DEPT_ID SYSTEM GENERATED, DEPT WITH OPTIONS SCOPE DEPT )
CREATE TABLE PROGRAMMER OF PROGRAMMER_T UNDER EMP
CREATE TABLE DEPT OF DEPT_T
( REF IS EMP_ID SYSTEM GENERATED, DEPT_MNG WITH OPTIONS SCOPE EMP )
Пример выборки, в том числе с подтаблицами: сначала будет произведена выборка имен служащих, удовлетворяющих условию, из таблицы EMP , затем – из таблицы PROGRAMMER , и эти промежуточные результаты будут скомбинированы в окончательный результат путем применения операции объединения (UNION) - Лист. 56.
Лист. 56. Выборка при наследовании
SELECT EMP_NAME FROM EMP WHERE EMP_SAL < 20000.00;
Выборка только служащих (см. Лист. 57)
Лист. 57. Выборка без учета наследования
SELECT EMP_NAME FROM ONLY ( EMP ) WHERE EMP_SAL < 20000.00 ;
В отличие от традиционного SQL, в объектном SQL не обязательно перечислять все таблицы, используемые в запросе в разделе From (см. Лист. 58).
Лист. 58. Выборка атрибута по ссылке
SELECT EMP_NAME, DEPT -> DEPT_NAME FROM EMP WHERE EMP_SAL < 20000.00 ;
SELECT EMP_NAME, DEPT -> DEPT_MNG -> EMP_NAME FROM EMP WHERE EMP_SAL < 20000.00 ;
В соответствии с принципом инкапсуляции, методы можно вызывать внутри запросов (см. Лист. 59).
Лист. 59. Вызов методов в запросе
SELECT DEPT_MNG -> EMP_NAME, DEPT_MNG -> age () FROM DEPT WHERE DEPT_NO = 605 ;
Имеется возможность полностью выбрать экземпляр структурного типа, идентифицируемый ссылочным значением (в SQL :1999 это называется разрешением ссылки – reference resolution ) - Лист. 60.
Лист. 60. Запрос с разрешением ссылки
SELECT DEREF ( DEPT_MNG ) FROM DEPT WHERE DEPT_NO = 605;
Д/З 11. Представьте предметную область из Д/З 1 в виде ОРБД (пользовательские типы и типизированные таблицы). Напишите запрос, в котором должна быть выборка из типизированных таблиц, переходы по ссылкам и вызов методов.