Иллюстрированный самоучитель по SQL для начинающих

Основы SQL

Структурированные типы

Вторая форма определяемого пользователем типа – структурированный тип. Он представляет собой перечень определений атрибутов и методов, а не базируется на отдельном предопределенном исходном типе.

Конструкторы

При создании структурного UDT-типа СУБД автоматически создает для него функцию-конструктор, давая ей имя, аналогичное имени UDT-типа.

Мутаторы и наблюдатели

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

Подтипы и супертипы

Между двумя структурированными типами могут существовать иерархические отношения. К примеру, тип MusicCDudt имеет подтипы RockCDudt и ClassicalCDudt. Для этих двух подтипов MusicCDudt является супертипом. Если для MusicCDudt нет подтипа, который является супертипом для RockCDudt, то RockCDudt является собственным подтипом MusicCDudt. Если RockCDudt имеет подтип с именем HeavyMetalCDudt, который, в свою очередь, также является подтипом для MusicCDudt, то тип HeavyMetalCDudt уже не будет являться собственным подтипом для MusicCDudt.

Структурированный тип, не имеющий супертипа, называется максимальным супертипом, а структурированный тип, не имеющий подтипа, – конечным подтипом.

Пример структурированного типа

Структурированные UDT-типы могут быть созданы следующим способом:

/* Создаем UDT-тип MusicCDudt */
CREATE TYPE MusicCDudt AS
/* Задаем атрибуты */
Title CHAR(40),
Cost DECIMAL(9.2),
SuggestedPrice DECIMAL(9.2),
/* Разрешаем подтипы */
NOT FINAL;
CREATE TYPE RockCDUdt UNDER MusicCDudt NOT FINAL;

Подтип RockCDudt наследует атрибуты своего супертипа MusicCDudt.

CREATE TYPE HeavyMetalCDudt UNDER RockCDUdt FINAL;

Создадим таблицы, использующие эти типы. Например:

CREATE TABLE METALSKU (
Album HeavyMetalCDudt,
SKU INTEGER);

Теперь можно добавить строки в новую таблицу:

BEGIN
/* Объявляем временную переменную 'a' */
DECLARE a = HeavyMetalCDudt;
/* Выполняем функцию-конструктор */
SET a = HeavyMetalCDudt ();
/* Выполняем первую функцию-мутатор */
SET a = a.title('Edward the Great');
/* Выполняем вторую функцию-мутатор */
SET a = a.cost(7.50);
/* Выполняем третью функцию-мутатор */
SET a = a.suggestedprice(15/99);
INSERT INTO METALSKU VALUES (a, 31415926);
END
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.