Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

9_Ломтадзе В.В., Шишкина Л.П_Практическая информатика_2011

.pdf
Скачиваний:
163
Добавлен:
26.03.2016
Размер:
3.06 Mб
Скачать

щаться по записям таблицы помогает навигатор – линейка с кнопками внизу каждой таблицы (см. рис. 9.1).

Таблицы Работы и Организации создаются точно так же, как таблица Объекты, только в таблице Организации больше полей.

Рис. 9.2. Создание таблиц Объекты и Затраты

9.3.3. Создание основной таблицы

Создание таблицы Затраты (см. рис. 9.2 – справа, внизу) требует дополнительных пояснений по поводу определения полей Код об, Код раб, Код орг. Каждое из этих полей необходимо определить как поле со списком. На рис. 9.2 показано, как это сделано для поля Код об. После определения типа этого поля (числовой) и уточнения его общих параметров (целое) с помощью вкладки Общие, переходим на вкладку Подстановка – она показана на рисунке справа,

121

внизу. Здесь в полях со списком выбираем тип элемента управления (Поле со списком), тип источника строк (Таблица или запрос), источник строк (таблица Объекты), присоединенный столбец (первый) и число столбцов в списке (2). Надо указать также ширину столбцов и списка, например, 1; 7 см – столбцы, 8 см – весь список. Теперь при вводе данных в поле Код об (прямо в таблицу Затраты или с помощью формы – рис. 9.3) можно не вспоминать коды объектов, а выбирать их из списка, в строках которого содержатся и коды и названия. Ведь мы включили в список поля Код об таблицы Затраты два столбца из таблицы Объекты, причем полю Код об таблицы Затраты соответствует именно первый (присоединенный) столбец таблицы Объекты. Для того чтобы список появился (см. рис. 9.1), надо просто щелкнуть мышью по стрелке у правого края поля Код об. Таким образом, Access предоставляет удобные средства для ввода и корректировки данных. Но еще удобнее для ввода данных в таблицу с большим числом полей использовать форму (см. форму Затраты на рис. 9.3). Созданию формы должно предшествовать создание схемы данных.

9.3.4. Создание схемы данных

Для создания схемы данных можно воспользоваться пунктом меню Сервис/Схема данных или соответствующей кнопкой на панели инструментов. В появившемся диалоговом окне надо выбрать таблицы, включаемые в схему. После этого появится схематическое изображение таблиц в виде прямоугольников, содержащих список полей (см. рис. 9.3). После этого остается с помощью мыши соединить поля Код об, Код раб, Код орг таблицы Затраты с ключевыми полями других таблиц – на схеме появятся стрелки с указанием типа связи (см. подраздел 9.2). Если по стрелке щелкнуть правой клавишей мыши, то всплывет меню, позволяющее изменить свойства связи: например, можно, выбрав метод Изменить связь, установить в очередном диалоговом окне фла-

жок Обеспечение целостности данных (см. подраздел 9.2). На рис. 9.3 схема данных изображена не в момент ее создания, а при создании запроса – схема данных используется всегда, когда данные берутся из нескольких связанных таблиц.

9.3.5. Создание формы

На рисунке 9.3 форма Затраты изображена справа, вверху. Если в таблице мы видим сразу много записей, то в форме видны поля только одной записи, но зато сразу видны все поля – даже если запись очень длинная. Кроме того, в форму Затраты можно включить поля не только из таблицы Затраты, но и из других таблиц, если, например, мы хотим видеть в форме не только коды (объекта, вида работ, организации), но и соответствующие названия (см. рис. 9.3). Для этого и потребовалось перед созданием формы создать схему данных.

Для создания формы Затраты в окне базы данных выберем тип объекта

Формы и нажмем кнопку Создание формы с помощью Мастера. После этого откроется диалоговое окно, позволяющее выбирать таблицы (или запросы), а из них – поля, включаемые в форму. Далее форма создается автоматически, почти

122

без участия пользователя. При вводе данных с помощью формы для перехода к очередной, предыдущей, к первой или последней записи таблицы используется навигатор – как и при работе с таблицей. Важно понимать, что форма – это не самостоятельный информационный объект, а только удобный способ визуализации записей таблиц, ввода в них данных и их корректировки. Конструкцию формы можно изменить после ее создания – в режиме конструктора. Например, поля Объект, Работа, Организация можно передвинуть, поместив их рядом с соответствующими кодами, справа от них.

Схема данных

Рис. 9.3. Использование формы для ввода просмотра и корректировки данных. Формирование или корректировка запроса в режиме конструктора

123

9.3.6. Создание запросов

Запросы создаются с целью отбора данных из таблиц по некоторым критериям. Например, создадим запрос Затраты за период, содержащий данные о затратах за любой период, который выберет пользователь с помощью параметров Дата1 и Дата2. Чтобы создать запрос, в окне базы данных выберем тип объекта – Запросы и нажмем кнопку Создание запроса с помощью конструк-

тора. В следующем диалоговом окне выберем таблицы, из которых собираемся отбирать данные, и получим окно, изображенное на рис. 9.3, внизу. В этом окне в полях со списками Имя таблицы и Поле надо выбрать поля, включаемые в запрос, ниже можно выбрать вариант сортировки записей и указать условия их отбора. Закрыв окно, можно запомнить созданный запрос. При его просмотре мы видим виртуальную таблицу (представление [11]), включающую только те данные, которые мы отобрали. Если изменить данные в исходных таблицах, то результат просмотра запроса также изменится.

Результаты запроса удобно использовать в качестве источника информации для составления отчета.

9.3.7. Формирование отчетов

На рис. 9.4 показан отчет Затраты по объектам за первый квартал

1998 года. В этот отчет включены данные из запроса Затраты за период. Отчет получен с помощью мастера отчетов. В окне базы данных надо выбрать тип объекта – Отчеты и нажать кнопку Создать отчет с помощью мастера, далее выбрать запрос Затраты за период – в качестве источника данных. После этого, делая выбор в предлагаемых диалогах, остается уточнить перечень полей, включаемых в отчет, вариант группировки и сортировки записей, вариант вывода итоговых строк и ориентацию страниц. Отчет в сочетании с запросом позволяет отобрать из базы данных требуемую информацию, сгруппировать итоговые записи (на рис. 9.4 группировка выполнена по объектам) и автоматически получить итоговые строки. Отчет можно напечатать, выбрав пункт меню Сер-

вис/Связи с Office/Публикация в Microsoft Office Word. Наконец, в отчет нетруд-

но внести редакционные изменения, но не в режиме создания с помощью мастера отчетов, а в режиме конструктора. Так в нашем примере слово Sum, которое процедура Мастер отчетов вставляет в итоговые строки, заменено на слово Сумма. Вообще в режиме конструктора можно изменять и таблицы, и формы, и запросы, и отчеты.

Завершая краткое рассмотрение СУБД Access, подчеркнем важную роль запросов. Именно с помощью запросов в любой СУБД можно отбирать данные по многим критериям, сортировать записи и, вообще, выполнять многие операции манипулирования данными. В основе этих операций – инструкции языка структурированных запросов (SQL). Когда мы создаем запрос, используя через процедуру Конструктор его визуальное конструирование, Access формирует текст этого запроса на языке SQL. Этот текст можно увидеть и при желании изменить в момент просмотра запроса. Для просмотра запроса мы нажимаем в

124

окне базы данных кнопку Запросы и двойным щелчком мыши открываем запрос. Эти действия приводят к появлению на экране сначала предложений по вводу значений параметров, а затем виртуальной таблицы, являющейся результатом выполнения запроса. Если теперь в меню приложения Access выбрать пункт Вид/Режим SQL, то мы увидим наш запрос не в виде таблицы отобранных данных, а в виде SQL-инструкций. Эти инструкции можно изменить и с помощью пункта меню Запрос/Запуск или кнопки Запуск на панели инструментов (красный восклицательный знак) выполнить запрос и получить новую таблицу с отобранными данными.

Рис. 9.4. Типичный вид отчета, получаемого с помощью СУБД Access

125

Завершая краткое рассмотрение СУБД Access, подчеркнем важную роль запросов. Именно с помощью запросов в любой СУБД можно отбирать данные по многим критериям, сортировать записи и, вообще, выполнять многие операции манипулирования данными. В основе этих операций – инструкции языка структурированных запросов (SQL). Когда мы создаем запрос, используя через процедуру Конструктор его визуальное конструирование, Access формирует текст этого запроса на языке SQL. Этот текст можно увидеть и при желании изменить в момент просмотра запроса. Для просмотра запроса мы нажимаем в окне базы данных кнопку Запросы и двойным щелчком мыши открываем запрос. Эти действия приводят к появлению на экране сначала предложений по вводу значений параметров, а затем виртуальной таблицы, являющейся результатом выполнения запроса. Если теперь в меню приложения Access выбрать пункт Вид/Режим SQL, то мы увидим наш запрос не в виде таблицы отобранных данных, а в виде SQL-инструкций. Эти инструкции можно изменить и с помощью пункта меню Запрос/Запуск или кнопки Запуск на панели инструментов (красный восклицательный знак) выполнить запрос и получить новую таблицу с отобранными данными.

Основные инструкции (команды) языка SQL мы считаем полезным рассмотреть, т.к. представление о языке SQL позволяет лучше понять возможности манипулирования данными, имеющиеся в современных СУБД. В русских переводах компьютерной литературы инструкции SQL и других языков программирования часто называют операторами. В англоязычных изданиях при-

меняются термины statement или instruction.

9.4. Основные возможности языка структурированных запросов

(SQL)

Сразу заметим, что в этой небольшой книге мы не ставим задачу дать описание SQL, а всего лишь приведем обзор основных команд и на нескольких примерах покажем возможности SQL-запросов. Что касается точного описания инструкций SQL, то это описание не совсем совпадает для различных СУБД. Наиболее известные серверы реляционных баз данных (Oracle, MS SQL Server, Cybase, Informix и некоторые другие) поддерживают ту или иную версию или уровень стандарта ANSI / ISO SQL (ANSI – Американский национальный институт стандартов, ISO – Международная организация стандартизации), но для повышения эффективности каждый коммерческий SQL-сервер применяет некоторые расширения стандарта. Приведенные ниже примеры проверены в рамках СУБД Access. Кстати, справочная система Access достаточно полно разъясняет инструкции SQL. Ясное и полное описание технологии клиент/сервер, включающее также классификацию и описание команд SQL, применительно к СУБД

Oracle 7 приведено в [14].

Приступая к рассмотрению SQL-запросов, надо также пояснить понятие транзакции. Транзакция базы данных – это единица работы, состоящая из од-

126

ной или нескольких инструкций (команд) SQL. Транзакцию нельзя разбить на отдельные запросы. Например, перечисление денег предполагает именно две неотделимые друг от друга операции: уменьшение суммы на одном счете в базе данных и равнозначное увеличение на другом счете. Поэтому SQL-серверы рассматривают поступающие команды SQL как временные шаги, пока не поступит команда COMMIT, отмечающая конец текущей транзакции.

Можно выделить несколько классов команд SQL: определения данных, манипулирования данными, управления транзакциями, управления данными (доступом к ним). Последние два класса инструкций применяются в запросах к SQL-серверам, а первые два класса – и в запросах к локальным СУБД.

Команды языка определения данных (DDL – Data Definition Language) –

это команды SQL, которые можно использовать для создания (CREATE), изменения (ALTER) и удаления (DROP) различных объектов базы данных (таблиц, процедур и др.). В качестве примера рассмотрим команду, с помощью которой можно создать таблицу Объекты [КодОб, ИмяОб]:

CREATE TABLE Объекты (КодОб LONG CONSTRAINT obj PRIMARY KEY, ИмяОб TEXT(40) )

В этой инструкции CREATE TABLE указывается имя создаваемой таблицы (Объекты), и затем в скобках, через запятую описываются поля записей. Поле КодОб имеет тип LONG (см. раздел 3), а после слова CONSTRAINT (ограничение) указывается имя индекса (obj) для этого поля и параметр PRIMARY KEY – ведь поле КодОб должно быть первичным ключом. Описание второго поля таблицы включает его имя (ИмяОб), тип (TEXT) и длину в байтах (40). Пример показывает, что при хорошем знании синтаксиса языка SQL структуру любой таблицы базы данных можно создать не только с помощью имеющихся в Access (но не в каждой СУБД) средств визуального конструирования, но и с помощью команды SQL.

К числу команд языка манипулирования данными (DML) относятся инструкции SELECT (отбор данных), INSERT (вставка записей в таблицу), UPDATE (обновление записей), DELETE (удаление записей). Приведем пример инструк-

ции SELECT:

SELECT Затраты.[Код затр], Объекты.Объект, Затраты.Дата, Затраты.Стоимость FROM Затраты, Организации, Работы, Объекты

WHERE Объекты.[Код об] = Затраты.[Код об]

AND Затраты.Дата >= #7/01/2009# AND Затраты.Дата < #1/1/2010# ORDER BY Затраты.[Код затр];

В этом примере создается виртуальная таблица, состав полей которой определен во фразе SELECT, до фразы FROM: поле Код затр из таблицы Затраты, поле Объект из таблицы Объекты и т.д. Имя таблицы и имя поля указываются через точку. Имя поля Код затр заключено в квадратные скобки, т.к. содержит пробел. В некоторых СУБД для ограничения имен с пробелами применяются апострофы. Поэтому удобнее при конструировании таблиц вместо пробелов в именах полей использовать подчерк.

127

Во фразе FROM указываются имена исходных таблиц.

Во фразе WHERE задаются условия отбора записей. Так, из таблицы Затраты отбираются только те записи, в которых дата больше (позже) или равна 01.07.2009 и меньше (раньше) 01.01.2010 (даты в текстах запросов задаются в формате #мм/дд/гг#). Для того, чтобы к записи из таблицы Затраты “привязать” через код объекта соответствующие записи из таблицы Объекты, во фразе WHERE заданы еще условия равенства этих кодов. Все условия заданы через И (AND), поскольку в этом примере требуется выполнение и первого, и второго, и третьего условий. В некоторых запросах условия задаются через ИЛИ (OR) – тогда для отбора записи требуется выполнение или первого, или второго условия.

Во фразе ORDER BY указано поле, по которому надо упорядочить (отсортировать) записи в виртуальной таблице результатов. Эта таблица не хранится в базе данных, а создается только в оперативном порядке, например, когда запрос является источником данных для формирования отчета.

На рис. 9.6 показан результат запроса, содержащего рассмотренную инст-

рукцию SELECT.

Рис. 9.6. Результат запроса, содержащего инструкцию SELECT

Приведем также примеры инструкции DELETE:

DELETE * FROM Объекты - удаление всех записей из таблицы Объекты, DELETE * FROM Организации WHERE Город IN (‘Париж’, ’Ницца’, ’Чикаго’) - удаление из таблицы Организации записей, соответствующих тем организациям, которые расположены в городах, входящих в указанное множество. Если в таблице таких записей не окажется, то ничего удалено не будет.

К числу команд управления транзакциями относятся следующие:

128

COMMIT - сохранить (зафиксировать) внесенные текущей транзакцией изменения,

ROLLBACK – отменить изменения, вносимые текущей транзакцией, SAVEPOINT – назначить промежуточную точку сохранения.

Промежуточные точки позволяют разбить выполняемую транзакцией работу на фрагменты:

INSERT …

DELETE … SAVEPOINT one UPDATE … DELETE … SAVEPOINT two INSERT … UPDATE …

Используя точки сохранения можно отменить одни части транзакции и оставить другие:

ROLLBACK TO SAVEPOINT two

Эта команда отменит действие всех SQL-инструкций после точки сохранения two.

Команды языка управления данными (DCL) используются для управления доступом пользователей к базе данных. Эти команды, как и инструкции управления транзакциями применяются при работе с SQL-серверами. Например, в СУБД Oracle 7 [14] введено понятие ролей. Каждая роль имеет имя и определенный набор полномочий: право создавать или удалять таблицы, изменять определенные таблицы и т.п. Если пользователь знает пароль некоторой роли, например, роли с именем role7, то он может установить эту роль в текущем сеансе и тем самым получить полномочия этой роли:

SET ROLE role7 IDENTIFIED BY x77y

- устанавливается роль role7

с паролем x77y.

 

Кроме обширного набора команд языка SQL, серверы реляционных баз данных предоставляют средства для создания процедур и триггеров базы данных (триггер - особый тип процедур – см. далее). Так, Oracle 7 предлагает для SQL процедурные языковые расширения, называемые PL/SQL. Сам SQL – непроцедурный язык: мы не видим деталей обработки, конкретных процедур, в которые сервер транслирует наш запрос. Отсюда и простота использования SQL. Процедурные языки, такие как Си, Паскаль, Бейсик, требуют детальной записи действий. Поэтому их использовать сложнее, но они обладают большей гибкостью и более широкими возможностями. PL/SQL сочетает возможности SQL с возможностями процедурного языка. Как и в программе на процедурных языках (раздел 10), в процедуре на PL/SQL можно описать переменные и константы, использовать инструкции проверки условий, организовывать циклы и т.д. В виде процедур и их пакетов можно запрограммировать сложные алгоритмы обработки данных, что иногда невозможно или неэффективно сделать с помощью одних только команд SQL. Особым видом процедур являются триг-

129

геры базы данных. Триггер – это процедура, связываемая с таблицей. Когда дается команда SQL, соответствующая условиям триггера, СУБД запускает триггер на выполнение. Поэтому триггеры используют для того, чтобы СУБД реагировала на различные ситуации, например, на ввод в таблицу определенных данных. Таким образом, в рамках технологии «клиент/сервер» на сервере хранятся не только данные, но и многочисленные процедуры их обработки.

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

Контрольные вопросы к главе 9

Что такое база данных, предметная область, структурирование данных; структуры данных – таблица, запись, поле; назначение ключа, индекса; что такое реляционная база данных;

понятие информационно-логической модели предметной области; назначение СУБД; нормализация отношений, что такое первая, вторая и третья нормальные

формы; обеспечение целостности данных в базе данных, понятия ссылочной це-

лостности и целостности домена; схема обобщенной технологии работы с СУБД;

работа с СУБД Access – создание новой базы данных, создание структуры таблиц, ввод данных в таблицы;

создание и применение форм, запросов, отчетов; что такое SQL, классы команд SQL;

команды языка определения данных; команды языка манипулирования данными; команды управления транзакциями;

команды языка управления данными (доступом к данным); что такое процедуры и триггеры базы данных.

130