Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ УПРАВЛЕНИЕ ДАННЫМИ 2012.doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

9. Объектные технологии в субд

9.1. Три манифеста баз данных

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

9.2. Объектная модель sql

Сформирована по второму манифесту БД (Стоунбрейкер и др.) и соответствует направлению объектно-реляционных БД. Включает два основных отличительных компонента – структурные  определяемые пользователями типы данных (User Defined Type – UDT) и типизированные таблицы (Typed Table). Первый компонент позволяет определять новые типы данных, которые могут быть гораздо более сложными, чем встроенные типы данных языка SQL. При определении структурного UDT требуется специфицировать не только содержащиеся в нем элементы данных, но и семантику типа данных, т.е. его поведение на основе интерфейса вызовов методов. Второй компонент – типизированные таблицы – позволяет определять таблицы, строки которых являются экземплярами (или значениями) UDT, с которым явно ассоциируется таблица. UDT образуют иерархию наследования, типизированные таблицы также образуют иерархию наследования, взаимосвязанную с иерархией UDT.

Дополнения к SQL в соответствии с объектной моделью:

  1. Массивы, например: INTEGER ARRAY [10]

  2. Анонимный строчный тип – это конструктор типов, позволяющий производить безымянные типы строк (кортежей). Любой возможный строчный тип получается путем использования ROW . При определении столбца, значения которого должны принадлежать некоторому строчному типу, используется конструкция ROW ( fld 1 , fld 2 , …, fld n) , где каждый элемент fldi , определяющий поле строчного типа, задается в виде тройки fldname - название , fldtype - тип, fldoptions - опции.

  3. индивидуальные UDT - аналог доменов, призванный их заменить – типы, определенные на одном базовом типе.

Примеры запросов, демонстрирующие возможности объектного расширения SQL для БД «Работники-Отделы-Проекты», приведены на Лист. 54 - Лист. 60.

Лист. 54. Приведение типов

CREATE TYPE EMP_NO AS INTEGER FINAL;

CREATE TYPE DEPT_NO AS INTEGER FINAL;

CREATE TYPE PRO_NO AS INTEGER   FINAL;

CREATE TABLE EMP (

     EMP_ID   EMP_NO,      EMP_NAME VARCHAR(20),      DEPT_ID  DEPT_NO,

     PRO_ID   PRO_NO ) ;

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;

Д/З . Представьте предметную область из Д/З в виде ОРБД (пользовательские типы и типизированные таблицы). Напишите запрос, в котором должна быть выборка из типизированных таблиц, переходы по ссылкам и вызов методов.