Структурированный продукт
- 1 year ago
- 0
- 0
Стандарт
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
);