Представления

Каталог

В языке SQL существует аналог того, что принято называть каталогов – информационная схема. Здесь это понятие имеет свой специфический смысл. Нестрого говоря, каталог в языке SQL состоит из дескрипторов (метаданных) для отдельной базы данных, а схема состоит из дескрипторов той части базы данных, которая принадлежит отдельному пользователю. Другими словами, в системе может быть любое число каталогов (по одному для каждой базы данных), каждый из которых делится на произвольное число схем. Однако каждый каталог должен содержать ровно схему с именем INFORMATION_SHEMA (информационная схема), которая, с точки зрения пользователя, и является схемой, выполняющей функции обычного каталога.

Таким образом, информационная схема состоит из набора SQL-таблиц, содержимое которых фактически отражает все определения из всех остальных схем данного каталога.

Приведем некоторые из наиболее важных представлений информационной схемы:

SCHEMA (схемы) DOMAINS (домены) TABLES (таблицы)
VIEWS (представления) COLUMNS (столбцы) DOMAIN_CONSTRAINTS (ограничения для домена)
TABLE_CONSTRAINTS (ограничения для таблицы) REFERENTIAL_CONSTRAINTS (ссылочные ограничения) ASSERTIONS (утверждения)

Следует отметить, что представление TABLES содержит информацию обо всех именованных таблицах, как базовых таблицах, так и представлениях, а представление VIEWS только информацию о представлениях.

Приведем примеры определения представления на языке SQL.

CREATE VIEW GOOD_SUPPLIER

AS SELECT SN, STATUS, CITY

FROM S

WHERE STATUS > 15.

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

SELECT SN, STATUS

FROM GOOD_SUPPLIER

WHERE CITY=’Москва’

Подставив вместо ссылки на имя представления его определение, получим выражение, которое будет подобно приведенному ниже (здесь стоит обратить внимание на вложенный подзапрос в предложении FROM):

SELECT GOOD_SUPPLIER.SN, GOOD_SUPPLIER .STATUS

FROM ( SELECT SN, STATUS, CITY

FROM S

WHERE STATUS > 15) AS GOOD_SUPPLIER

WHERE GOOD_SUPPLIER.CITY = ’Москва’

Это выражение может быть затем упрощено, например, следующим образом:

SELECT SN, STATUS

FROM S

WHERE STATUS > 15 AND CITY = ’Москва’

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

В качестве второго примера приведем операцию удаления.

DELETE

FROM GOOD_SUPPLIER

WHERE CITY=’Москва’

Запрос на удаление, который будет выполняться на самом деле, выглядит следующим образом:

DELETE

FROM S

WHERE STATUS > 15 AND CITY=’Москва’