PC Magazine/RE logo
(С) СК Пресс 1/96
PC Magazine, September 26, 1995, p. 239

СУБД для ПК как средства работы с запросами

Сэл Риккарди


Пакеты Access и Paradox научились нескольким трюкам у специализированных систем обработки запросов в среде "клиент-сервер"

Получение ответов на сложные вопросы - одна из основных причин, по которой мы тратим время и деньги на использование систем управления базами данных. Кто больше всего покупает у нашей фирмы? Каков объем продаж в регионе? Какое изделие пользуется наибольшим спросом в этом квартале? Четкие, точные и своевременные ответы на подобные вопросы - краеугольный камень управлени любым бизнесом. Так откуда же берутся эти ответы?

Сегодня существует несколько типов программ с графическим интерфейсом, упрощающих подготовку запросов к базам данных. Среди них специализированные средства первичной обработки запросов и составления отчетов, такие, как Borland ReportSmith for Windows и Intersolv Q+E, возможно наиболее известные в корпоративной среде. Эти средства представляют собой типичные программы- клиенты, разработанные для извлечения информации из корпоративных баз данных, которые размещаются на серверах. В таких специализированных изделиях основное внимание уделяется выборке и представлению информации и могут быть реализованы сложные функции для выполнени подробного анализа или составления отчетов. Как правило, в них нет встроенных средств управлени данными. Нередко требуется, чтобы пользователь хорошо знал общие принципы организации реляционных СУБД, а также имел полную информацию об организации своей базы.

Вновь возникший подкласс средств первичной обработки - "интеллектуальные" системы формировани запросов - дает конечным пользователям возможность готовить запросы, используя более интуитивно понятные "бизнес-объекты", которые заранее определяютс администратором на основе элементов основной базы данных. В целом "интеллектуальные" средства еще не достигли той степени зрелости, которая характерна дл их основных соперников и требуют серьезной предварительной работы от администраторов систем (подробный обзор специализированных средств работы с SQL-запросами и отчетами обоих типов содержится в статье "Прямые ответы на простые вопросы", PC Magazine/Russian Edition, N 9, 1995, с. 41).

СУБД для персональных компьютеров

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

В данной статье мы рассматриваем две ведущие СУБД для ПК - Microsoft Access 2.0 и Borland Paradox for Windows 5.0, - концентрируя свое внимание на том, как их использовать для выборки данных из локальной или удаленной БД. Мы подробно рассмотрим интерфейс запросов каждого программного продукта и действия, необходимые для подключения к корпоративным данным.

Запросы и соединения

Запрос (Query) - это обращение за информацией к базе данных. Запросы применяются для выбора колонок и строк, выводимых на дисплей, для сортировки строк и дл выполнения расчетов. Их можно даже использовать как основу для внесения изменений в базу данных. Но наиболее часто запрос употребляется, чтобы получить ответ на заданный вопрос. Для этого соответствующие инструкции следует сформулировать на языке, который "понимает" СУБД. Если у вас нет администратора, в обязанности которого входит выполнять эту работу, вам самим придется сначала узнать, в какой базе данных и в каких таблицах хранится необходимая информация. Это связано с тем, что в реляционной базе данных информаци поделена на множество тематических таблиц, чтобы свести к минимуму дублирования данных. После этого вы показываете своей СУБД, как воссоединить данные, размещая общие колонки в связанных таблицах.

Например, у вас могут быть таблица SalesOrder (Заказ на продажу) и таблица LineItem (Товарная позиция), связанные полем OrderNumber (Номер заказа). Дл составления запроса, ответом на который будет объем продаж за месяц, необходимо приказать программе "состыковать" таблицы SalesOrder и LineItem по полю OrderNumber. Таблица SalesOrder содержит дату продажи. В таблице LineItem хранятся сведения о проданных товарах и заплаченных суммах. Функция обработки запроса отбирает строки по значениям номеров заказов, вычисляет объем продаж по позициям, исходя из количества и цены, и сортирует и группирует итоги по месяцам. Соединение таблиц может показаться какой-то волшебной наукой, но оно требуется во всех случаях, за исключением самых простых. Для составления запросов требуется знать, как устроена ваша база данных и, в частности, как связаны между собой таблицы.

Как Access, так Paradox for Windows требуют, чтобы необходимыми познаниями обладал конечный пользователь, хотя и различаются способами создания табличных связей и обработки информации. Access позволяет группировать таблицы, запросы, отчеты, макрокоманды, формы и любые программные модули на языке Access Basic, в контейнере самой базы данных. Затем можно единовременно определить табличные взаимосвязи, и программа будет использовать эту информацию там, где это возможно. Например, когда таблицы добавляются в запрос, Access автоматически накладывает условия объединения по умолчанию, связыва таблицы на основе сохраненных в описании базы данных сведений об их взаимоотношениях.

В пакете Paradox for Windows единый контейнер базы данных отсутствует, поэтому и не используется реальна концепция базы данных как таковой. Но можно создавать внешнюю модель данных, которая определяет отношени таблиц, а затем выбрать эту модель в качестве основы для построения запроса. После этого Paradox обратится к таблицам и сформирует соединения, опираясь на модель данных, но по умолчанию он вводит в запрос все таблицы из модели данных, вместо того чтобы позволить отбирать те из них, которые нужны в запросе.

SQL и QBE

Со временем методы описания запросов улучшились. Традиционно приходилось использовать SQL (язык структурированных запросов). Разработанный в середине 70-х годов как язык обработки данных дл исследовательского проекта фирмы IBM, язык SQL стал стандартом де-факто для использования с реляционными базами данных в середине 80-х годов. Но, изучение SQL, как и любого другого языка, требует времени, и ваши успехи зависят оттого, насколько хорошо вы знаете принципы построения реляционных СУБД. SQL содержит мощные средства и остается стандартным языком дл выборки данных с серверов. Создатели современных СУБД для ПК осознали значение SQL и предусмотрели стандартные средства для работы с ним как в Access, так и в Paradox for Windows.

В конце 70-х отделение IBM Research разработало новый метод составления запросов, названный QBE (query by example - запрос по образцу) и задуманный как средство, облегчающее работу для неспециалистов.

QBE - метод, основанный на использовании примеров, - называется так, потому что условия запроса формируютс путем заполнения пустых табличных бланков связующими значениями-образцами. Например, для поиска строк, у которых в поле "штат" занесено значение "Нью-Йорк", нужно перейти в колонку State и ввести NY. Дл соединения таблиц связующие элементы заносятся в каждую таблицу. Например, для соединения таблиц SalesOrder и LineItem следует поместить слово _JOIN1 в колонку с номером заказа в табличном бланке SalesOrder и точно такое же слово _JOIN1 в аналогичной колонке таблицы LineItem. Для поиска годовых окладов, превышающих 40 000 долл., вы вводите выражение >40000 в соответствующую колонку табличного бланка. Основна идея этого метода - сделать диалог человека с программой более простым, чтобы требовалось помнить как можно меньше ключевых слов или правил синтаксиса машинного языка.

Большинство СУБД и программ для работы с запросами предусматривают тот или иной тип заполняемых по методу QBE бланков, хотя они не обязательно основаны на официальном синтаксисе QBE корпорации IBM. Например, в пакете Access используется более современный метод - графический запрос по образцу (GQBE), получивший свое название потому, что объединения указываютс графически, а не с помощью элементов примеров, а также поскольку в нем применяются современные приемы общени с оператором типа drag-and-drop. В свою очредь в пакете Paradox for Windows используется метод QBE, который весьма напоминает оригинальный QBE. Это может оказатьс преимуществом для тех, кто знаком с методикой IBM. Другие СУБД для ПК - например, пакет Lotus Approach 3.0, - предусматривают другой основанный на примерах метод, называемый запрос по форме (query by form), в котором пользователи, чтобы сформулировать критерии запроса, заполняют "бланки".

В определенной степени QBE-интерфейсы, реализованные в пакетах Access и Paradox for Windows, и язык SQL напоминают друг друга. Например, оба пакета генерируют предложения SQL из составленных вами QBE-запросов, чтобы извлечь данные с сервера. Access позволяет пойти и обратным путем, благодаря чему можно вносить изменения в сгенерированное предложение SQL, и при этом они будут отражаться в бланке QBE Access.

PARADOX: традиционный QBE

Интерфейс запроса по образцу в пакете Paradox for Windows весьма напоминает интерфейс исходного QBE. Дл создания запроса вы выбираете пункт меню File|New|Query (Файл|Создать|Запрос), а затем указываете таблицы, которые нужны для запроса. У вас есть возможность выбора модели данных, чтобы указать программе, к каким таблицам обращаться. Каждая таблица отображается в виде пустого бланка в окне подготовки запроса. Для выбора колонок, которые должны быть представлены в итоговой таблице, в каждой из них размещается метка. Метка, используемая по умолчанию, - простая "галочка" - означает, что в итоговый набор должны быть занесены только уникальные значения. Метки других типов позволяют оставлять повторяющиеся значения, сортировать строки или группировать их по значениям полей.

Для наложения критериев совпадения нужно просто занести значения образцов в соответствующие поля. Можно употреблять специальные операторы, такие, как NOT, BLANK, LIKE или универсальные символы для уточнени операторов поиска и сравнения, чтобы указать необходимость выборки в диапазоне значений. Можно применять условия AND (логическое И) и OR (логическое ИЛИ). Первое осуществляется вставкой запятой между отдельными выражениями-образцами, последнее - с помощью оператора OR или дополнительной строки. Разрешено также применение ряда операторов, выполняющих вычислени локальных или обобщенных величин.

Реализация QBE в Paradox предусматривает связующие элементы - символьные строки, которые в чем-то похожи на переменные. Связующий элемент можно использовать дл вывода обобщенного значения в определенном поле. После этого можно употреблять связующий элемент в расчетах или при формировании условий отбора либо дл объединения таблиц. В запросах Paradox таблицы соединяются путем размещения бланков в окне конструктора запросов и занесения одинаковых связующих элементов в совпадающие колонки каждой таблицы. Выполнение этой операции можно задать и графически, выбрав пиктограмму Join Table (Связать таблицы), а потом последовательно щелкнув кнопкой мыши на нужных колонках в первой и второй таблицах. Можно и ввести одинаковые связующие элементы с клавиатуры.

Графический QBE пакета Access

В графическом интерфейсе запроса по образцу в Access используется подход, с более современным интерфейсом (с применением методов point-and-click и drag-and-drop). Для создания запроса вы выбираете закладку Query (Запрос) в контейнере своей базы данных, а затем указываете на пункт New. После этого можно создать новый запрос с помощью мастера (Wizard) или окна Query. При работе с окном Query можно отбирать таблицы или ранее составленные запросы для переноса их в это окно.

В верхней части окна запроса вы увидите свои таблицы. Access автоматически наложит принимаемые по умолчанию условия соединения, если в свое время вы настроили связи между таблицами. Access может сформировать связь вместо вас, если две таблицы содержат совпадающие поля. В распоряжении пользовател есть возможность соединять таблицы, проводя линию между подходящими полями.

Для выбора колонок, которые войдут в состав запроса, нужно "перетащить" поля из списка полей в верхней части окна Query в строку Field (Поле) бланка QBE в нижней части окна. При использовании этого способа в бланке QBE вы видите только те поля, которые нужны. Порядок сортировки для колонки можно выбрать, щелкнув по ячейке Sort и указав нужный пункт в ниспадающем списке.

Критерии совпадения указываются путем ввода значений-примеров в раздел Criteria (Критерии). Как и в пакете Paradox, предусмотрен ряд операторов сравнения, специальных функций и универсальных символов дл уточнения критериев поиска. Для объединения нескольких условий в рамках одного поля употребляется оператор AND (логическое И). Множественные условия в одной строке критериев автоматически объединяются через логическое И. Для задания условия ИЛИ критерии в одном поле объединяются с помощью оператора OR либо каждое условие заносится в отдельную строку. Если у вас нет желани задавать критерии непосредственно, можно обратиться к модулю Access Expression Builder (Конструктор выражений) и сформулировать критерии путем выбора значений из списков полей. В пакете Access предусмотрен полный комплект операторов и функций для вычислени локальных или обобщенных показателей по вашим данным.


Microsoft Access 95: новые способы работы с запросами

Сэл Риккарди

Методы работы с запросами, который годился бы дл всех пользователей и на все времена, нет и быть не может. Хорошая программа должна обеспечивать разнообразные способы организации запросов. Судя по ранней бета-версии грядущего пакета Microsoft Access 95, корпорация Microsoft разделяет это мнение.

Для начинающих в Access будет иметься средство Filter by Form (Форма-фильтр). С его помощью можно щелкнуть по кнопке на инструментальной панели, и ваша форма превратится в пустой бланк, в который можно заносить критерии отбора записей. Как только пустые поля будут заполнены, щелкните по кнопке на панели с инструментами еще раз, и Access отфильтрует данные соответствующим образом. Можно указывать искомые значения, вводя их с клавиатуры или путем выбора из списков. Есть возможность обращаться к модулю Expression Builder за помощью при формировании критериев отбора. Filter by Form обещает значительно упростить многие основные запросы и работает также с данными в табличном представлении. В новой редакции предусмотрено и такое средство, как Filter by Selection (Фильтр по выбранному). С его помощью можно указывать искомое значение, выделив его в форме или таблице с данными, а затем щелкнув по соответствующей кнопке на инструментальной панели. Как только Access наложит фильтр, можно еще больше сузить круг рабочих записей, выделив другое значение и снова щелкнув по кнопке на панели.

Новый мастер запросов (Query Wizard) позволит выбрать поля, которые вы хотите видеть в итоговой таблице запроса, и заставить Access выделить те таблицы, которые в данном случае нужно соединить. Модуль Performance Analyzer Wizard (Мастер по анализу производительности) проанализирует ваши таблицы и даст рекомендации по изменениям, содействующим повышению производительности, таким, как создание индексов или изменение типа данных. В результате скорость реализации запросов может существенно возрасти. У вас будет также возможность быстро отсортировать итоговую таблицу запроса, щелкнув правой кнопкой мыши и выбрав из всплывающего меню Sort Descending (Сортировка по убыванию) или Sort Ascending (Сортировка по возрастанию) или нажав кнопки на инструментальной панели. Кроме того, вы сможете сохранять условия-фильтры с таблицами, формами и отчетами, так что при следующем открытии этих объектов фильтры будут применятьс автоматически.


Фильтры, поиски, мастера, сводные таблицы

Как Access, так и Paradox for Windows содержат специальные средства для организации быстрого поиска. Например, в обоих пакетах есть функция, называема фильтром. Фильтр подобен простому запросу, который применяется, когда у вас нет желания потрудиться над созданием настоящего запроса, который можно будет сохранить на будущее, а строку необходимо найти быстро, возможно лишь однократно. Фильтры лучше употреблять дл временного выделения набора строк, которые вы уже видите. Недостаток фильтров состоит в их меньшей гибкости по сравнению с полнофункциональными интерфейсами запросов - например, нельзя использовать фильтр для расчета обобщенных показателей.

При работе с таблицей часто возникает необходимость быстро найти определенное значение в колонке или строке. Например, вам может потребоваться найти фамилию "Smagurkey" в колонке Last Name. И Access, и Paradox for Windows содержат функциональные средства дл специального поиска этого типа. В Access эта функци называется Find (Найти), а в Paradox - Locate Values (Найти значение [поля]). Оба позволяют указывать, где следует искать значение: только в данной колонке или по любому полю в строке.

В дополнение к запросам, фильтрам и пунктам поиска в меню Access поставляется с комплектом "мастеров" (Wizard) по подготовке запросов, разработанных, чтобы руководить вами на всех этапах, необходимых дл создания запросов определенных типов. Есть четыре мастера: один создает запросы по сведению данных (crosstab), второй занимается поиском строк-дубликатов в таблицах или запросах, третий предназначен для поиска в одной таблице записей, не имеющих аналогов в другой таблице, и, наконец, мастер-архивариус копирует записи из существующей таблицы в новую, а затем по вашему желанию удаляет строки из исходной таблицы. Из этой четверки на нас особое впечатление произвел Crosstab Wizard. Сводный запрос обобщает информацию в формате, подобном электронной таблице. Например, мы применяли такой запрос к нашей базе данных, чтобы подвести итоги продаж по изделиям и годам. Чтобы сделать это, сначала мы сформировали обычный запрос для отбора информации с помощью конструктора запросов Access для извлечения и обобщения продаж изделий по годам. Затем обратились к "мастеру" Crosstab Wizard для построения сводного запроса, используя в качестве отправной точки наш исходный запрос. В ответ на приглашение мастера мы выбрали Productname (Наименование изделия) как заголовок строк, Year (Год) как заголовок колонок и Sum (Sales) (Сумма продаж) как итоговое значение. После этого Access сгенерировал запрос и выдал результаты. Весь процесс занял около 10 мин.

Работа со сводными запросами в Access реализована с помощью предложения Transform - расширения реализации SQL в Access. В пакете Paradox for Windows в настоящее время нет встроенных средств работы со сводными запросами и имеется только один ассистент по созданию запросов - Coach (Инструктор), - который показывает, как создавать простой однотабличный запрос.

Запросы в среде клиент-сервер

Сложилось мнение, что доступ из СУБД для ПК к любым данным на сервере требует большой работы по программированию. Однако это уже не так. В наши дни доступ к серверу становится стандартным требованием и современные изделия становятся столь же хорошо приспособленными к работе с удаленными данными, как и с локальной информацией. Access и Paradox for Windows не исключения. При работе с обоими пакетами обращение к нашей тестовой базе данных на основе Microsoft SQL Server 4.21a никаких затруднений не вызвало: Access подключался с помощью ODBC, а в Paradox использовалс один из факультативных драйверов SQL Link компании Borland.

Для подключения к данным на сервере с помощью Access сначала требуется установить соответствующие ODBC-драйверы для СУБД (в комплект поставки Access входят драйверы для Microsoft SQL Server и Sybase SQL Server). Затем с помощью программы-администратора ODBC настраивается источник данных для каждой базы данных, доступ к которой будет нужен. Например, мы настроили источник данных pcmagsales для обращения к нашей тестовой базе данных на Microsoft SQL Server. Источник данных сохраняет информацию об удаленной базе данных, к которой вы хотите обращаться, а также информацию о доступе к серверу, на котором размещается база, например такую, как "Имя сервера".

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

При создании запросов, обращающихся к удаленным источникам данных, Access прервет запрос, если сервер не будет отвечать определенное время. У каждого запроса есть свое собственное значение параметра просрочки (time-out). Если сообщение об ошибке типа time-out ODBC будет возбуждаться слишком часто, можно увеличить значение этого параметра.

Для доступа к данным на сервере с помощью Paradox for Windows сначала устанавливается подходящий драйвер SQL Links для SQL СУБД. Компания Borland поставляет драйверы для SQL СУБД Informix, Interbase, Microsoft, Oracle и Sybase. Как только драйвер будет установлен, с помощью Paradox следует создать псевдоним базы данных на сервере - этот процесс подобен созданию источника данных ODBC. Вы указываете имя базы данных, им сервера, тип драйвера, идентификатор для вхождения в систему и т. д. Затем, когда требуется открыть удаленную таблицу, вы выбираете псевдоним в окне диалога Open и Paradox выводит на экран диалог вхождения в систему сервера, где нужно ввести ваш пароль, зарегистрированный сервером. Подобно Access, Paradox отменит выполнение запроса к удаленным данным, если в течение определенного времени сервер не отвечает.

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

Когда это возможно, Access автоматически генерирует "живой" итоговый набор запроса, доступный дл изменений. Это означает, что таблицу с результатами можно преобразовывать и изменения они будут автоматически отражены в исходных таблицах, даже в случае сложных многотабличных соединений. Описанные средства многих приводят в настоящий восторг. При извлечении удаленных данных Access не может переносить изменения в таблицу на сервере, если только она не имеет уникального (Unique) индекса. Это существенно, поскольку Access должен иметь возможность однозначным образом идентифицировать каждую строку, которую требуется обновить. В пакете Paradox for Windows средства обеспечения работы с "живыми" образами запросов ограничены однотабличными запросами: для этого следует установить флажок Live Query View (Динамический набор) в диалоговом окне Answer Option (Результат выполнения запроса).

Каковы они в деле?

Мы создали и выполнили набор разнообразных тестовых запросов к локальным и удаленным данным, используя обе программы, чтобы посмотреть поближе, что каждая из них собой представляет. Наша тестовая база данных состояла из девяти таблиц, а запросы предусматривали вопросы типа "Какие изделия лучше всего продаются в каждом из регионов?" и "Кто из наших покупателей самый активный?". В большинстве запросов использовались многотабличные соединения. Подводя итоги, можно сказать, что оба изделия смогли справиться со всеми видами запросов, которые мы задавали, но где более, а где менее элегантно. Формулировать и выполнять запросы с помощью интерфейса GQBE Access легко и просто. При использовании Paradox for Windows для выполнения многих запросов требовалось несколько шагов: сначала получение промежуточного результата в таблице ответа, а затем запрос к этой таблице для перехода к следующему этапу и т. д. Эти действия можно связать воедино, составив соответствующую программу, но в целом мы обнаружили, что интерфейс QBE пакета Paradox более сложен дл освоения и использования.

Метод группирования всех объектов базы данных и таблиц в контейнере с последующим указанием единого главного набора табличных связей, применяемый в Access, имеет большой смысл и избавляет от лишней работы при создании запросов. Например, нет необходимости пробираться по каталогам в поисках таблиц для своего запроса. Access позволяет извлекать их из контейнера базы данных. Этот централизованный взгляд на базу данных и ее компоненты - правильный подход, и нам бы хотелось увидеть, что остальные производители приняли его.

"Мастера" в Access действительно полезны, особенно Crosstab Wizard. В число расширений стандартного SQL, вводимых корпорацией Microsoft, входят Transform дл создания сводных запросов и Top n для ограничения числа строк в итоговой выборке, облегчающие тем самым выполнение задач, с трудом решаемых иными способами. Если вы прошли школу традиционного QBE, методы составления запросов, принятые в Paradox for Windows, вы найдете очень знакомыми. Но если вы только начинаете осваивать работу СУБД, то обнаружите, что GQBE пакета Microsoft Access не только мощен, но и прост в освоении.

Borland Paradox for Windows 5.0
Ориентировочная розничная цена: 350 долл. (русифицированная версия в Москве стоит около 180 долл.).
Рекомендуемая конфигурация системы: ПК на основе ЦП 486 с ОЗУ 8 Мбайт, Microsoft Windows 3.1 или более поздней версии.
Borland International, Scotts Valley, CA 95066; 800-233-2444,
в Москве 369-42-98.
Microsoft Access 2.0
Ориентировочная розничная цена: 339 долл. (русифицированная версия в Москве стоит около 150 долл.)
Рекомендуемая конфигурация системы: ПК на основе ЦП 386 с ОЗУ 8 Мбайт, Microsoft Windows 3.1 или более поздней версии.
Microsoft Corp., Redmond, WA 98052; 800-426-9400,
в Москве 244-34-74.