Структурированный тип
Эту статью предлагается удалить. |
Стандарт 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
);
К дальнейшему прочтению
[править | править код]- Jim Melton. Advanced SQL: 1999. — Morgan Kaufmann, 2003. — ISBN 978-1-55860-677-7. Chapters 2-4.
- Suzanne W. Dietrich. Fundamentals of Object Databases: Object-Oriented and Object-Relational Design / Suzanne W. Dietrich, Susan D. Urban. — Morgan & Claypool Publishers, 2011. — ISBN 978-1-60845-476-1. Chapter 3.
- Catherine Ricardo. Databases Illuminated. — 2nd. — Jones & Bartlett Publishers, 2011. — ISBN 978-1-4496-0600-8. Chapter 8.