Меню

Главная
Случайная статья
Настройки
Структурированный тип
Материал из https://ru.wikipedia.org

Стандарт SQL:1999 привнес ряд функциональности объектно-реляционных баз данных в язык запросов SQL, основным из них были Структурированные типы данных, определенные пользователем (structured user-defined types), обычно называемые просто структурированными типами. Они могут быть определены в чистом SQL c использованием выражения CREATE TYPE, а также в языке программирования Java с помощью SQL/JRT. Структурированные типы SQL позволяют использовать одиночное наследование.

Структурированные типы поддерживаются в разной степени в Oracle Database, IBM Db2, PostgreSQL и Microsoft SQL Server, хотя последний позволяет использовать только структурированные типы данных, определенные с помощью CLR.

SQL примеры

Объектно-структурированный тип

Для определения пользовательского структурного типа в Oracle Database можно использовать следующие выражения:
CREATE TYPE Person_Type AS OBJECT (
    person_title VARCHAR2(10),
    person_first_name VARCHAR2(20),
    person_last_name VARCHAR2(20),
) 
NOT FINAL;


Подобный структурированный тип может быть затем использован для создания таблицы, которая бы позволила также содержать все колонки определенные в Person_Type:
CREATE TABLE Person_Table OF Person_Type;


Пользовательские структурированные типы поддерживают наследование — это означает, что можно создать другой тип, который наследует от предыдущего. Тем не менее выражение NOT FINAL должно быть включено в определение базового структурированного типа для того, чтобы было можно создать другие подтипы.
CREATE TYPE Student_Type UNDER Person_Type (
    matriculation_number NUMBER(10)
);


Student_Type затем может быть использован для создания Student_Table, которая будет включать все колонки определенные в Person_Type. Первичный ключ и ограничения должны быть определены во время или после создания таблицы и не могут быть определены внутри самого структурированного типа.
CREATE TABLE Student_Table OF Student_Type (
    matriculation_number PRIMARY KEY,
    CONSTRAINT person_title_not_null_constraint NOT NULL (person_title),
);


Каждый структурированный пользовательский тип также может содержать другие типы для создания более сложных структур:
CREATE TYPE Address_Type AS OBJECT (
    address_street VARCHAR2(30),
    address_city VARCHAR2(30),
);

CREATE TYPE University AS OBJECT (
    university_name VARCHAR2(30),
    university_address Address_Type
);


К дальнейшему прочтению
Downgrade Counter