Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10864

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

146

Глава 7. Системы управления базами данных

Их же идейные противники считают необходимым использование уникальных

идентификаторов только в случае, если объект не содержит уникального ключа,
полностью не приемлют полиморфизм и в качестве основного языка для работы
с базами данных предлагают некоторое развитие языка SQL.

Сегодня, по проишествии более двух десятков лет с момента публикации этих

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

7.3.2 Общие понятия объектно-ориентированного подхода
к базам данных

Одним из аргументов в пользу внедрения объектно-ориентированных возмож-

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

• объект и идентификатор объекта (индивидуальность объекта);

• атрибуты и методы;

• классы;

• иерархии и наследование классов.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Определение объектного типа служит в качестве шаблона, но не распределяет

память. Объекты хранятся физически как строки или столбцы таблицы.

Любая сущность реального мира в объектно-ориентированных языках и си-

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

Каждый объект имеет состояние и поведение. Состояние объекта — набор зна-

чений его атрибутов.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Поведение объекта — набор методов (программный код), опери-
рующих над состоянием объекта.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Определение метода в ООБД производится в два этапа. Сначала объявляет-

ся сигнатура метода, т. е. его имя, класс, типы или классы аргументов и тип или


background image

7.3 СУБД третьего поколения и объектно-ориентированные СУБД

147

класс результата. Методы могут быть публичными (доступными из объектов дру-
гих классов) или приватными (доступными только внутри данного класса). На вто-
ром этапе определяется реализация класса на одном из языков программирования
ООСУБД, например в СУБД Oracle это подпрограммы на языке PL/SQL или на
С, которые определяют набор допустимых операций для конкретного объектного
типа. Иногда методы называют поведенческой частью объектного типа.

Значение атрибута объекта — это тоже некоторый объект или множество объек-

тов. Состояние и поведение объекта инкапсулированы в объекте; взаимодействие
между объектами производится на основе передачи сообщений и выполнений со-
ответствующих методов.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Множество объектов с одним и тем же набором атрибутов
и методов образует класс объектов
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Объект должен принадлежать только одному классу (если не учитывать воз-

можности наследования). Допускается наличие примитивных предопределенных
классов, экземпляры которых не имеют атрибутов (целые, строки и т. д.). Класс,
объекты которого могут служить значениями атрибута объектов другого класса,
называется доменом этого атрибута.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Допускается порождение нового класса на основе уже существу-
ющего класса 
— наследование.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

В этом случае новый класс, называемый подклассом существующего класса

(суперкласса), наследует все атрибуты и методы суперкласса. В подклассе, кроме
того, могут быть определены дополнительные атрибуты и методы. Различаются
случаи простого и множественного наследования. В первом случае подкласс может
определяться только на основе одного суперкласса, во втором случае суперклассов
может быть несколько. При поддержании множественного наследования классы
связаны в ориентированный граф с корнем, называемый решеткой классов. Объект
подкласса считается принадлежащим любому суперклассу этого класса.

Одной из более поздних идей объектно-ориентированного подхода является

идея возможного переопределения атрибутов и методов суперкласса в подклассе
(перегрузки методов). Эта возможность увеличивает гибкость, но порождает до-
полнительную проблему: при компиляции объектно-ориентированной программы
могут быть неизвестны структура и программный код методов объекта, хотя его
класс (в общем случае — суперкласс) известен [1]. Для разрешения этой проблемы
применяется так называемый метод позднего связывания, означающий по сути де-
ла интерпретационный режим выполнения программы с распознаванием деталей
реализации объекта во время выполнения посылки сообщения к нему.

Специфической особенностью модели ООБД является возможность объявле-

ния дополнительных «исключительных» атрибутов и методов для именованных


background image

148

Глава 7. Системы управления базами данных

объектов. Это означает, что конкретный именованный объект-представитель клас-
са может обладать типом, являющимся подтипом типа класса [1].

Объектная база данных обеспечивает доступ к различным источникам данных,

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

7.3.3 Реализация объектно-ориентированного подхода в СУБД
Oracle

СУБД Oracle, начиная с версии 8i, предоставляет расширенный набор встроен-

ных типов данных, а также позволяет конструировать новые типы данных со спе-
цификацией методов доступа к ним, т. е. фактически это означает наличие инстру-
мента, позволяющего строить структурированные типы данных, непосредственно
отображающие сущности предметной области. В данном разделе будем опираться
на материалы, изложенные в [19, 23, 24].

Oracle 8i уже фактически опирался на новый стандарт SQL, позволяющий опи-

сывать определения новых типов объектов, состоящих из атрибутов (скалярных —
т. е. других типов, множеств объектов, ссылок на объекты) и обладающих ассоци-
ированными с ним методами. Любая колонка таблицы может быть любого типа,
поддерживаются также вложенные таблицы и массивы объектов переменной длины.

Среди ОО-возможностей СУБД Oracle версии 12c можно выделить следующие

компоненты и функциональные реализации:

• объектные типы (записи или классы);

• объектные представления, которые позволяют собрать воедино несколько

нормализованных отношений в одном бизнес-компоненте;

• объектный язык. Расширения языков Oracle SQL и PL/SQL;

• объектный API-интерфейс. Объекты поддерживаются с помощью предком-

пилятора Oracle (например, Pro*C), PL/SQL или OCI;

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

пов Object Type Translator (OTT) можно преобразовывать объектные типы
Olacle8 в классы C++.

Объектные типы
В последних версиях Oracle определяемые пользователем типы данных могут

применяться в качестве следующих составляющих:

• столбца реляционной таблицы;

• атрибута внутри другого объектного типа;

• части объектного представления реляционных таблиц;

• основы объектной таблицы;

• основы переменных языка PL/SQL.

В состав расширенного языка Oracle SQL входят перечисленные ниже опера-

торы, предназначенные для управления объектными типами:

• CREATE TYPE;

• ALTER TYPE;


background image

7.3 СУБД третьего поколения и объектно-ориентированные СУБД

149

• DROP TYPE;

• GRANT TYPE;

• REVOKE TYPE.

Подобно столбцам отношения атрибуты внутри объектного типа должны быть

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

. . . . . . . . . . . . . . . . . . . . . .

Пример 7.1

. . . . . . . . . . . . . . . . . . . . .

CREATE type employee_type as object (

ssn number (9),

name varchar2 (35),

address varcher2 (70),

resume varchar2 (250));

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

На рисунке 7.4 представлено окно в среде PL/SQL Developer (среда для работы

с БД Oracle), в котором отображается созданный объектный тип.

Рис. 7.4 – Отображение пользовательского объектного типа

Employee_type в БД Oracle


background image

150

Глава 7. Системы управления базами данных

. . . . . . . . . . . . . . . . . . . . . .

Пример 7.2

. . . . . . . . . . . . . . . . . . . . .

CREATE table Manager_candidates (
Position varchar2 (40),
Vacancy varchar2 (250),
Employee employee_type);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

На рисунке 7.5 представлена структура созданной таблицы «Manager_candi-

dates», в которой атрибут «Employee» определен на объектном типе данных «Em-
ployee_type».

Рис. 7.5 – Структура таблицы «Manager_candidates» с атрибутом Employee

INSERT INTO manager_candidates (
'Технический менеджер', 'свободная вакансия',
emploee_type(12345, 'Иванов И. И.',
'г. Томск, ул. Ленина, 21', 'Научный работник'));

SELECT mc.employee.name
FROM manager_candidates mc
WHERE mc.employee.ssn=12345;
В результате выполнения этого запроса на выборку будет выдано значение

атрибута «Employee.name» из таблицы «Manager_candidates» (рис. 7.6).

Рис. 7.6 – Результат выполнения запроса на выборку (Пример 7.2)

. . . . . . . . . . . . . . . . . . . . . .

Пример 7.3

. . . . . . . . . . . . . . . . . . . . .

CREATE table employee of employee_type;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .