Введение в дисциплину «Безопасность систем баз данных». Теоретические основы построения реляционных баз данных. Верификация баз данных и проведение аудита в СБД. Распределенные базы данных, страница 20

select * from et_chairs

Именно в ответ на такое действие начнет выполняться запрос под именем et_chairs, и его результаты будут выданы пользователю. Допускаются и более сложные случаи, когда над представлениями выполняются операции ограничения, проекции, соединения с другими таблицами и представлениями. Можно создать представление на основе выборки из другого представления.

В некоторых СУБД (к ним относится и Microsoft SQL Server) допускается использование имен представлений в операторах INSERT, UPDATE и DELETE. Разумеется, запись данных производится не в представление само по себе: через представление они попадают в реальную, базовую таблицу. Для представления et_chairs базовой таблицей является таблица chairs. И именно в нее попадет новая строка при выполнении оператора INSERT над представлением et_chairs; именно в базовой таблице chairs будут обновляться строки при выполнении над представлением оператора UPDATE и из нее же будут удалены строки при выполнении оператора DELETE.

Впрочем, выполнение операторов INSERT, UPDATE и DELETE над представлениями возможно не всегда. Нельзя модифицировать столбцы представлений, если их значения получены как результат расширенной проекции столбцов базовой таблицы. Если же представление создано на основе соединения нескольких таблиц, то модифицировать в нем за один прием можно столбцы, относящиеся только к одной базовой таблице.

Процедуры и функции

Вставка, удаление, обновление и выборка записей – это элементарные операции манипулирования данными, без которых не обходится ни одна АИС. Однако не любая функция АИС может быть сведена к выполнению элементарной операции. Часто требуется реализовывать в АИС очень сложные алгоритмы обработки данных; эти алгоритмы должны включать множество SQL-вызовов, с использованием ветвлений и циклов.

Наиболее удобным механизмом реализации сложных функций АИС (их еще называют бизнес-функциями, где под словом «бизнес» понимаются любые процессы предметной области) является использование процедур и функций, коды которых сохраняются вместе с таблицами в БД.

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

Так сложилось исторически, что за процедурами БД закрепилось название «хранимые процедуры» или «сохраненные процедуры» (от англ. «stored procedures»). Функции же называются просто функциями, словом «хранимые» они в литературе не обозначаются.

Отличие процедуры от функции в том, что процедура вызывается, как оператор, выполняет определенные действия в БД, но не возвращает никаких значений и не может быть использована в качестве операнда при вычислении выражений. Функция всегда возвращает результат вычисления. Результат имеет определенный тип данных и, как правило, фигурирует в качестве операнда в выражениях.

Наиболее развитые СУБД дают возможность создавать процедуры и функции не только на SQL, но и на других языках высокого уровня. В SQL Server существует механизм расширенных хранимых процедур. Их реализации содержатся в динамически подключаемых библиотеках (DLL). Имеется набор встроенных расширенных процедур, позволяющих отправлять сообщения по электронной почте, вызывать интерфейс командной строки, работать с COM-объектами и т. д. Разработчикам разрешается регистрировать библиотеки хранимых процедур собственной разработки. При этом должен использоваться интерфейс программирования SQL Server Open Data Services API. В других СУБД – например, в Oracle – поддерживаются хранимые Java-процедуры.

Индексы