Теория и практика построения баз данных (1088289), страница 61
Текст из файла (страница 61)
Таким образом, мы не будем обсуждать его в этой книге, Хотя реляционное исчисление трудно для понимания и использования, его непроцедурный характер является преимуществом. Поатому разработчики СУБД начали поиск других непроцедурных стратегий, который привел к появлению третьей и четвертой категорий языков манипулирования реляционными данными.
Языки, ориентированныс на преобразования (Ггапз(ог>п-ог1епсег! 1апйцайез),— это класс непроцедурных языков, которые преобразуют входные данные, имеющие вид отношений, в результат, представляющий собой одно отношение. В этих языках имеются простые в псполъзованип структуры, позволяю>цие указать действия, которые необходимо совершить с предоставленными данными. 81)Т)АКЕ, 8Е>41>'ЕЬ и ЩЬ это примеры языков, ориентированных на преобразования. Язык 5Я1. будет подробно изучаться нами в главах 9, 12 и 13.
Четвертая категория языков манипулирования реляционными данными — это графические языки. К этой категории относятся запрос по образцу ((2пегу-ЬуЕхашр1е) и зопрос из формы (снегу-Ьу-Еогш). В числе продуктов, поддерживающих агу категория>, можно упомянуть АрргоасЬ (фпрмы Ьогпз) и Асссзз. Пользователю выдается графическое представление одного отношения или более.
Представление может ил>еть вил формы для ввода данных, электронной таблицы или какой-либо другой структуры. СУБД преобразует представление в соответствующее отношение и формирует запросы (скорее всего, на 5(1ь) от лица пользователя. После этого пользователи инипинруют выполнение операторов 1),:ч11, по они об этом не знают.
Четыре категории языков манипулирования реляционными данными; + реляционная алгебра; + реляционное исчисление; + языки, ориентированные на преобразования (например, ВСЕ.); + запрос по образцу, запрос из формы. Интерфейсы языков манипулирования данными В атом разделе мы рассмотрим четыре вида интерфейсов, с помощьк> которых осуществляется манипулирование >шформацией в базе данных. Манипулирование данными посредством форм В большинстве реляционных СУБД имеются средства для создания форм.
Некоторые формы генерируются автоматически при определении таблицы, другие должны создаваться разработчиком. Помощь в этом процессе может оказать интеллектуальный ассистент, присутствующий, например, в Ассезз. Форма может иметь вид таблицы (электроцной таблицы), в которой одновременно показывая>тся несколько строк отношения. Есть и другой вид форм, где каждая строка отношения представлчется отдельно. На рис.
8А и 8.5 приведены примеры обоих гипов форм для таблицы РАТ1сйТ с рис. 8.1. Болъшинство продуктов обсспечивак>т некоторую гибкость в обработке форм и отчетов. Например, строки для обработки могут выбираться по значениям столбцов и могут быть отсортированы. Таблица па рис. 8А отсортирована по значению поля Ассопл1!4пп>Ьег. Рис. 8.8.
пример однострочной экранной формы Рй>еу > 1/19/46 Р Аье1,' 6/19/67'М Мч/рпу 1 12/28>81 М 1С>а)е>чэЫ ! 10/21/73 Г ТИ9 ' 6/23/38 Р 0>хоя > 4/16/87 М Рис. 8.4. Пример табличной экранной 147 1яе 193 6Ы9Ь 289 ао9Ь 633 1.ечу 661 Брося 704 Ьечу формы 284 Глава 8. Основы построения реляционных баз данных Манипулирование реляционными данными 285 Многие формы, генерируемые по умолчанию, содержат в себе данные только из одного отношения. Если нужно получить данные из двух или более отпогпений, тогда, как правило, нужно создавать специальные формы с помои(ью средств СУБД.
Такие средства позволяют создавать как многотабличные, так н многострочные формы. Поскольку использование этих средств сильно зависит от конкретной СУБД, мы не будем рассматривать их далее. Интерфейс языка запросов и обновлений Второй тип интерфейса к базе данных — это язык запросов и обновлений (ппегу/ црдаге !апйцаяе), или просто язык запросов (г!вегу !апяпайе). (хотя большинство такого рода языков позволяют выполнять как запрос, так и обновление данных, их чаше всего называют языками запросов.) В этом случае пользователь вводит команды, которые указывают, какие действия необходимо произвести над базой данных.
СУБД расшифровывает эти команды и выполняет предписанные действия. Рисунок 8.6 показывает, какие программы участвуют в обработке запроса. Пользователь м( — ~ Или Пользователь < — ~ Операторы Команды Данные запроса СУБД Рис. 8.6. Программы, участвующие в обработке запроса Важнейшим из всех языков запросов является БО1. Чтобы дать вам представление о языках запросов, рассмотрим следующий БО1-оператор, который обрабатывает отношение РАТ1ЕМТ, показанное на рис. 8.1: 5ЕСЕСТ Маие.
ОагеОТВтггП ГРОМ РАТ1ЕМТ ММЕРЕ РПуаасаап = 'Сечу' Этот оператор извлекает из отношения РАТ1 ЕМТ все строки, в которых атрибут РПугйс!ап имеет значение 'Сечу'. Впаченпя атрибутов Маше и ОасеОГВМГП из этих строк он затем помещает во вторую таблицу. Хранимые процедуры Со временем полъзователи и разработчики баз данных обнаружили, что некоторые последовательности команд БО(. приходится выполнять регулярно. Единственное, что при этом меняется, — это значения, указываемые в предложении ГНЕВЕ. Например, при ежемесячном начислении платежей выполняются одни и те же БО1.-операторы, но с различной датой закрытия. Чтобы учесть эту потребность, производители СУБД ввели так называемые хранимые процедуры (агогед ргоседцгев).
Такая процедура представляет собой набор БО1-операторов, который хранится в файле и может быть запущен на выполнение одной командой. Параметры, указываемые в предложении УУНЕРЕ и т. д., могут передаваться при вызове процедуры. Примером может служить следующее: ОО В!СС!МО 5ТОРЕО РРОСЕООРЕ ГОР В!ССОАТЕ = "9/1У2000" Эта строка запускает хранимую процедуру под названием 81ШМО со значением параметра В1ЕСОАТЕ, равным "9/1/2000". По мере накопления разработчиками опыта выявилась одна проблема.
БЯ1 создавался как подъязык данных, и при этом не делалось попыток наделить его всеми элементами полноценного языка программирования. Однако некоторые из этих элементов были необходимы для написания хранимых процедур, и производители СУБД создали расширенные версии ЯЯЕ, включив в пих дополнительные возможности. Один такой язык, РЕ/БО!., был разработан для Огас1е, а еще один, под названием ТВАНБАСТ-ЯО1, — для БЯь Бегчег. Более подробно об этих языках вы узнаете пз глав 12 и 13, Специальный тип хранимой процедуры — тлриггер (Гнййег) — вызывается СУБД при выполнении заданного условия.
Например, в приложении, обрабатывающем заказы, разработчик должен создать триггер, который запускается в тех случаях, когда количество товара на складе оказывается ниже заданного предела (то есть пора заказывать товар у оптового поставщика). Более подробно о хранимых процедурах вы узнаете из глав 12 и 13. Интерфейс прикладных программ с!етвертый тип интерфейса доступа к данным — это доступ через прикладные программы, написанные на таких языках программирования, как СОВ01., ВА81С, Рег1, Рааса! и Сч-+.
Кроме того, некоторые прикладные программы пишутся на встроенных в используемые СУБД языках. Из таких языков программирования наибольшей известностью пользуется дВАБЕ. Есть два стиля интерфейса между прикладными программами и СУБД. Первый из нпх характеризуется тем, что прикладные программы вызывают подпрограммы пз библиотеки функций, поставляемой в комплекте с СУБД. Напрпмер, чтобы считать строку из таблицы, прикладная программа вызывает функцию чтения СУБД и персдает ей параметры, которые указывают нужную таблицу, требуемые столбцы, критерии выбора строки и т.
п. В некоторых случаях вместо вызовов функций используется объектно-ориентпровацньш синтаксис. В приведенном ниже коде Ассевв объектный указатель дЬ устанавливается на открытую в данный момент базу данных, а объектный указатель га ссьшается на строки таблицы РАТ1ЕМТ: аег бЬ = сиггепсбЫ ) вес га = бЬ.ОрепРесогбаес("РАТ!ЕМТ"Э С помощью последнего указателя можно обращаться к свойствам открытого набора записей и запускать его методы.
Например, с помощью свойства реляционная алгебра 287 Реляционная алгебра 286 Глава 8, Основы построения реляционных баз данных гз.А!1оигОе!ебопз можно определить, могут ли быть удалены записи пз набора записей РАТ1ЕИТ. Метод МотеГ1гзг перемещает курсор на первую строку. Второй, более старый тип интерфейса используется иногда в СУБД, предназначенных для болыних ЭВМ и серверов. Здесь производителем СУБД определен набор высокоуровневых команд доступа к данным. Эти команды, которые относятся к обработке базы данных и не являются частью какого-либо стандартного языка, встраиваются в код прикладной программы. Прикладная программа со встроенными командами передается па предварительный компилятор, входящий в комплект СУБД. Он транслирует операторы доступа к данным в корректные вызовы функций и определяет области данных, которые будут совместно использоваться прикладными программами и СУБД.
Предварительный компилятор также вставляет в программу код, поддерживающий доступ к этим областям данных. Обработанная такцм образом программа передается на языковой компилятор. На рис. 8.7 показано взаимодействие программ в этом процессе.
Рис. 8.7. Обработка программы со встроенными операторами 801 Помимо использования в обработке запросов, 51т! применяется в качестве языка доступа к данным в прикладных программах. В этом режиме операторы 5О!. встраиваются в программы и транслируются в вызовы функций предварительным компилятором. Тем самым уменьшается количество времени и денег, треоуемое на обучение персонала, поскольку один и тот же язык может использоваться как для запросов, так и для доступа к данным в прикладных программах. Необходимо, однако, преодолеть одно неудобство.