Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Использование представлений.
До сих пор мы говорили о таблицах, которые реально хранятся в базе данных. Это, так называемые, базовые таблицы (base tables). Существует другой вид таблиц, получивший название " представления" (иногда их называют" представляемые таблицы" ). Определение: Когда содержимое базовых таблиц меняется, СУБД автоматически перевыполняет запросы, создающие view, что приводит к соответствующи изменениям в представлениях. Представление определяется с помощью команды CREATE VIEW < имя_представления> [< имя_столбца>,...] AS < запрос> При этом должны соблюдаться следующие ограничения:
Создадим представление, хранящее информацию об авторах, их книгах и издателях этих книг: CREATE VIEW books AS SELECT authors.author, titles.title, titles.yearpub, publishers.publisher FROM authors, titles, publishers, titleauthors WHERE titleauthors.au_id=authors.au_id AND titleauthors.title_id=titles.title_id AND titles.pub_id=publishers.pub_id Теперь любой пользователь, чьих прав на доступ к данному представлению достаточно, может осуществлять выборку данных из books. Например: SELECT titles FROM books WHERE author LIKE '%Date'
SELECT author, count(title) FROM books GROUP BY author (Права пользователей на доступ в представлениям назначаются также с помощью команд GRANT / REVOKE.) Из приведенного выше примера достаточно ясен смысл использования представлений. Если запросы типа " выбрать все книги данного автора с указанием издательств" выполняются достаточно часто, то создание представляемой таблицы books значительно сократит накладные расходы на выполнение соединеия четырех базовых таблиц authors, titles, publishers и titleauthors. Кроме того, в представлении может быть представлена информация, явно не хранимая ни в одной из базовых таблиц. Например, один из столбцов представления может быть вычисляемым: CREATE VIEW amount (publisher, books_count) AS SELECT publishers.publisher, count(titles.title) FROM titles, publishers WHERE titles.pub_id=publishers.pub_id GROUP BY publisher; Здесь использована еще одна, ранее не описанная, возможность SQL - присвоение новых имен столбцам представления. В приведенном примере число изданий, осуществленных каждым издатетлем, будет хранится в столбце с именем books_count. Заметим, что если мы хотим присвоить новые имена столбцам представления, нужно указывать имена для всех столбцов. Тип данных столбца представления и его нулевой статус всегда зависят от того, как он был определен в базовой таблице (таблицах). Запрос на выборку данных к представлению выглядит абсолютно аналогично запросу к любой другой таблице. Однако на изменение данных в представлении накладываются ограничения. Кратко о них можно сказать следующее:
Удаление представления производится с помощью оператора: DROP VIEW < имя_представления> Другие возможности SQL. Описываемые ниже возможности пока не стандартизованы, но представлены в той или иной мере практически во всех современных СУБД.
· · CREATE FUNCTION < имя_функции> ([< тип_параметра1>,...< тип_параметра2> ]) · RETURNS < возвращаемые_типы> · AS [ < SQL_оператор> | < имя_объектного_модуля> ] LANGUAGE 'SQL' | 'C' | 'internal' Вызов созданной функции осуществялется из оператора SELECT (также, как вызываются функции агрегирования).
· · CREATE TRIGGER < имя_триггера> · ON < имя_таблицы> · FOR { INSERT | UPDATE | DELETE } · [, INSERT | UPDATE | DELETE ]... AS < SQL_оператор> Ключевое слово ON задает имя таблицы, для которой определяется триггер, ключевое слово FOR указывает какая команда (команды) модификации данных активирует триггер. Операторы SQL после ключевого слова AS описывают действия, которые выполняет триггер и условия выполнения этих действий. Здесь может быть перечислено любое число операторов SQL, вызовов хранимых процедур и т.д. Использование триггеров очень удобно для выполнения операций контроля ограничений целостности (см. главу 4.3).
Вопросы практического програмирования. В этой главе рассматриваются некоторые способы создания приложений, работающих с базой данных при помощи языка SQL. Как правило, любой поставщик СУБД предоставляет вместе со своей системой внешнюю утилиту, которая позволяет вводить операторы SQL в режиме командной строки и выдает на консоль результаты их выполнения. Недостатки такого режима работы очевидны: необходимо знать SQL, необходимо помнить схему БД, отсутствует возможность удобного просмотра результатов выполнения запросов. Поэтому, подобные утилиты стали инструментами администраторов баз данных, а для создания пользовательских приложений используются универсальные и специализированные языки программирования. Приложения, написанные таким образом, позволяют пользователю сосредоточиться на решении собственных задач, а не на структурах данных. Почти все способы организации взаимодействия пользователя с базой данных, рассматриваемые ниже, основаны на модели " клиент-сервер". Т.е. предполагается, что каждое приложение обработки данных разбито, как минимум, на две части:
При этом предполагется, что каждая часть приложения функционирует на отдельном компьютере, т.е. к выделенному серверу БД с помощью локальной сети подключены персональные компьютеры пользователей (клиенты). Это наиболее популярная сегодня схема организации вычислительной среды. Более подробно архитектура " клиент-сервер" и различные способы ее реализации будут обсуждаться в главе 7. Язык SQL позволяет только манипулировать данными, но в нем отсутствуют средства создания экранного интерфейса, что необходимо для пользовательских приложений. Для создания этого интерфейса служат универсальные языки третьего поколения (C, C++, Pascal) или проблемно-ориентированные языки четвертого поколения (xBase, Informix 4Gl, Progress, Jam,...). Эти языки содержат необходимые операторы ввода / вывода на экран, а также операторы структурного программирования (цикла, ветвтеления и т.д.). Также эти языки допускают определение структур, соответствующих записям таблиц обрабатываемой базы данных. В исходный текст программы включаются операторы языка SQL, которые во время исполнения передаются серверу БД, который собственно и производит манипулирование данными. Отношения, полученные в результате выполнения сервером SQL-запросов, возвращаются прикладной программе, которая заполняет строками этих отношений заранее определенные структуры. Дальнейшая работа клиентской программы (отображение, корректировка записей) ведется с этими структурами. Рассмотрим различные способы орагнизации доступа прикладной программы к серверу базы данных. |
Последнее изменение этой страницы: 2017-05-05; Просмотров: 360; Нарушение авторского права страницы