Использование представлений.
До сих пор мы говорили о таблицах, которые реально хранятся в базе данных. Это, так называемые, базовые таблицы (base tables). Существует другой вид таблиц, получивший название "представления" (иногда их называют"представляемые таблицы").
Определение:
Представление (view) - это таблица, содержимое которой берется из других таблиц посредством запроса. При этом новые копии данных не создаются
Когда содержимое базовых таблиц меняется, СУБД автоматически перевыполняет запросы, создающие view, что приводит к соответствующи изменениям в представлениях.
Представление определяется с помощью команды
CREATE VIEW <имя_представления> [<имя_столбца>,...]
AS <запрос>
При этом должны соблюдаться следующие ограничения:
· представление должно базироваться на единcтвенном запросе (UNION не допустимо)
· выходные данные запроса, формирующего представление, должны быть не упорядочены (ORDER BY не допустимо)
Создадим представление, хранящее информацию об авторах, их книгах и издателях этих книг:
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.
Описываемые ниже возможности пока не стандартизованы, но представлены в той или иной мере практически во всех современных СУБД.
· Хранимые процедуры. Практический опыт создания приложений обработки данных показывает, что ряд операций над данными, реализующих общую для всех пользователей логику и не связанных с пользовательским интерфейсом, целесообразно вынести на сервер. Однако, для написания процедур, реализующих эти операции стандартных возможностей SQL не достаточно, поскольку здесь необходимы операторы обработки ветвлений, циклов и т.д. Поэтому многие поставщики СУБД предлагают собственные процедурные расширения SQL (PL/SQL компании Oracle и т.д.). Эти расширения содержат логические операторы (IF ... THEN ... ELSE), операторы перехода по условию (SWITCH ... CASE ...), операторы циклов (FOR, WHILE, UNTIL) и операторы предачи управления в процедуры (CALL, RETURN). С помощью этих средств создаются функциональные модули, которые хранятся на сервере вместе с базой данных. Обычно такие модули называют хранимые процедуры. Они могут быть вызваны с передачей параметров любым пользователем, имеющим на то соотвествующие права. В некоторых системах хранимые процедуры могут быть реализованы и в виде внешних по отношению к СУБД модулей на языках общего назначения, таких как C или Pascal. Пример для СУБД PostgreSQL:
· CREATE FUNCTION <имя_функции> ([<тип_параметра1>,...<тип_параметра2>])
· RETURNS <возвращаемые_типы>
· AS [ <SQL_оператор> | <имя_объектного_модуля> ]
LANGUAGE 'SQL' | 'C' | 'internal'
Вызов созданной функции осуществялется из оператора SELECT (также, как вызываются функции агрегирования). Более подробно о хранимых процедурах см. статью Э.Айзенберга Новый стандарт хранимых процедур в языке SQL, СУБД N 5-6, 1996 г.
· Триггеры. Для каждой таблицы может быть назначена хранимая процедура без параметров, которая вызывается при выполнении оператора модификации этой таблицы (INSERT, UPDATE, DELETE). Такие хранимые процедуры получили название триггеров. Триггеры выполняются автоматически, независимо от того, что именно является причиной модификации данных - действия человека оператора или прикладной программы. "Усредненный" синтаксис оператора создания триггера:
·
· CREATE TRIGGER <имя_триггера>
· ON <имя_таблицы>
· FOR { INSERT | UPDATE | DELETE }
· [, INSERT | UPDATE | DELETE ] ...
AS <SQL_оператор>
Ключевое слово ON задает имя таблицы, для которой определяется триггер, ключевое слово FOR указывает какая команда (команды) модификации данных активирует триггер. Операторы SQL после ключевого слова AS описывают действия, которые выполняет триггер и условия выполнения этих действий. Здесь может быть перечислено любое число операторов SQL, вызовов хранимых процедур и т.д. Использование триггеров очень удобно для выполнения операций контроля ограничений целостности Мониторы событий. Ряд СУБД допускает создание таких хранимых процедур, которые непрерывно сканируют одну или несколько таблиц на предмет обнаружения тех или иных событий (например, среднее значение какого-либо столбца достигает заданного предела). В случае наступления события может быть инициирован запуск триггера, хранимой процедуры, внешнего модуля и т.п. Пример: пусть наша база данных является частью автоматизированной системы управления технологическим процессом. В поле одной из таблиц заносятся показания датчика температуры, установленного на резце токарного станка. Когда это значение превышает заданный предел, запускается внешняя программа, изменяющая параметры работы станка.
Создание форм и отчетов
Формы – одно из основных средств для работы с базами данных в Access - используются для ввода новых записей (строк таблиц), просмотра и редактирования уже имеющихся данных, задания параметров запросов и вывода ответов на них и др. Формы представляют собой прямоугольные окна с размещенными в них элементами управления. Существует возможность создания форм динамически при исполнении программы, однако естественным режимом их создания является режим визуального конструирования. Выбор команды Форма в меню Вставка выводит на экран окно Новая Форма, позволяющее задать таблицу или запрос, для которых создается новая форма, и указать режим ее создания. Кроме создания формы “вручную”, создание формы можно автоматизировать, используя Мастер форм (FormWizard). Кроме того, можно создать специальные формы, в том числе с листами данных (Autoform: Datasheet), диаграммами (Chart Wizard) и сводными таблицами (PivotTable Wizard) в формате Excel.
Элементами управления могут быть графические примитивы, надписи, рисунки и другие статические объекты, которые не изменяются при переходе между записями. Сюда же следует отнести текстовые поля, содержимое которых модифицируется при передвижении по записям. Элементы управления могут использоваться для ввода и отображения дат, а также для выполнения вычислений и вывода результата. Элементами управления являются кнопки команд, которые активизируют исполнение различных операций; объекты типа подчиненные формы (бланк таблицы, дочерней по отношению к форме); объекты, облегчающие восприятие данных, такие как календарь или счетчик; а также элементы пользователя.
В большинстве случаев для создания элемента управления достаточно перетащить его на форму из панели инструментов. Каждый элемент помещается в определенный раздел формы. В зависимости от типа раздела (Заголовок формы, Область данных и др.) элемент управления будет появляться однажды, отображаться на каждой странице, в каждой группе записей или для каждой записи.
Для создания формы с помощью Мастера форм (FormWizard) предполагается следующая последовательность действий:
Выберите Формы / Создать. На экране появится окно диалога “Новая форма”, в котором необходимо выбрать метод построения формы и исходный объект для построения формы. В качестве такого объекта могут быть выбраны таблица или запрос.
Допустим в качестве исходной таблицы мы выбрали Оборудование, в качестве метода создания форм - Мастер форм. После нажатия кнопки Ok, переходим к следующему диалоговому окну.
Укажите поля, которые необходимо поместить на форму. Кнопки расположенные в нижней части экрана позволяют возвратиться назад на один шаг или продолжить процесс формирования формы далее.
На следующих шагах Мастер форм предлагает выбрать форму представления отчета (в столбец, ленточную, табличную или выровненную) и стиль оформления. Стили представляют собой набор различных фоновых рисунков с соответствующим подбором шрифтов и форм полей.
На последнем шаге можно изменить предлагаемое Мастером название формы на свое собственное и на этом завершить процесс создания формы нажав кнопку Готово.
Если по каким-либо причинам форма вас не удовлетворяет, нажмите кнопку Конструктор, и вы перейдете в режим конструктора форм, в котором получите в свое распоряжение все средства для создания полноценной формы.
Отчеты, как и формы, являются главными элементами интерфейса баз данных. Они позволяют выводить на печать информацию о содержимом базы в удобном для пользователя виде. Большая часть отчетов создается на этапе проектирования офисного приложения. Новый отчет создается командой Отчет меню Вставка. Во многом формирование отчетов совпадает с процессом создания экранных форм.
Пусть, например, мы создаем отчет с помощью Мастера для распечатки списка всех учеников класса. В качестве исходных данных выберем запрос Класс_ФИО, который содержит поля Класс и Фамилия.
На следующем шаге Мастер отчетов предлагает осуществить группировку данных. Так Класс будет печататься только один раз в заголовке листа, а фамилии учеников - в виде списка в одну колонку.
После чего Мастер отчетов предлагает ввести сортировку. Допускается сортировка записей в возрастающем или убывающем порядке, включающая до четырех полей.
На следующих шагах предлагаются выбрать макет отображения отчета и ориентацию листа бумаги, а также определить стиль заголовка и подножий.
Шагнув далее, вы увидите на экране окно диалога с клетчатым флагом, который указывает на то, вы подошли к финишу.
Задайте наименование отчета и нажмите кнопку Готово.
Модифицируется отчет следующим образом: необходимо выбрать его имя на вкладке Отчеты и щелкнуть на кнопке Конструктор. Выбор команды Просмотр в том же окне позволяет увидеть, как будет выглядеть распечатанный отчет.