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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

[править | править код]

Для определения пользовательского структурного типа в 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
);

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

[править | править код]