Представления
Каталог
В языке 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=’Москва’