
- •Методическая разработка
- •Отношения и переменные-отношения
- •Оптимизация
- •Каталог
- •Базовые переменные отношения и представления
- •Транзакции
- •Введение в язык sql
- •Обзор языка sql
- •Каталог
- •Представления
- •Транзакции
- •Взаимодействие приложений и субд
- •Домены, отношения и базовые переменные-отношения
- •Значения отношений
- •Средства sql
Каталог
В языке 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=’Москва’
Транзакции
Для операторов COMMIT и ROLLBACK в языке SQL есть прямые аналоги. Это операторы COMMIT WORK и ROLLBACK WORK соответственно (в обоих случаях слово WORK – необязательное). Но в языке SQL нет явного оператора, соответствующего оператору BEGIN TRANSACTION. Неявно транзакция начинается всякий раз, когда выполняется оператор, способный «инициализировать транзакцию» (transaction-initiating), но только в том случае, когда никакая транзакция не выполняется. Таковыми операторами являются практически все операторы, которые мы обсуждаем в этом разделе.
Замечание. Некоторые реализации языка SQL имеют в своем составе аналоги оператора BEGIN TRANSACTION, которые в явном виде позволяют задавать начало выполнения транзакции. Примером такой реализации может послужить СУБД Microsoft SQL Server 2000.