Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гайдамакин Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный курс.doc
Скачиваний:
372
Добавлен:
02.05.2014
Размер:
4.3 Mб
Скачать

4. Ввод, обработка и вывод данных в фактографических аис

Как уже отмечалось, цикл функционирования автоматизи­рованных информационных систем включает сбор, комплекто­вание данных, поиск и выдачу сведений для удовлетворения информационных потребностей абонентов систем. Если исклю­чить организационно-технологические аспекты сбора, комплек­тования и выдачи информации, технология работы пользовате­лей с базами данных АИС включает ввод (загрузку), обработку и вывод данных.

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

4.1. Языки баз данных

Как следует из рассмотрения внутренней схемы баз дан­ных, одной из основных функций систем управления базами данных является создание и поддержание собственной систе­мы размещения и обмена данными между внешней (дисковой) и оперативной памятью. От эффективности реализации в каж­дой конкретной СУБД данной функции (формат файлов дан­ных, индексирование, хэширование и буферизация) во многом зависит и эффективность функционирования СУБД в целом. Поэтому основные усилия создателей первых СУБД в конце 60-х — начале 70-х годов были сосредоточены именно в этом направлении.

Однако такой подход приводил к «самостийности», уни­кальности каждой конкретной СУБД и созданной на ее основе автоматизированной информационной системы. В результате для реализации любой функции по вводу, обработке или выво­ду данных требовались квалифицированные программисты для написания специальных программ на алгоритмических языках высокого уровня (в 70-х годах ФОРТРАН, КОБОЛ и др.), «зна­ющих» особенности структуры и способы размещения данных во внешней и оперативной памяти. В итоге работа с базами дан­ных осуществлялась через посредника в виде квалифицированного программиста, «переводящего» информационные потреб­ности пользователя в машинный код,* что схематично иллюст­рируется на рис. 4.1.

* В этом плане примечателен афоризм Чарльза Бахмана, который метко подме­тил, что «программист— это штурман в море данных». Статью по поводу присужде­ния ему премии Тьюринга за пионерские работы в области технологий баз данных он так и назвал — «The Programmer As Navigator»(Программист как штурман). [Вацкевич Д. Стратегии клиент/сервер, – К.: Диалектика, 1996. С. 216.]

Рис. 4.1. Схема взаимодействия пользователя с базой данных в ранних СУБД

Такое положение дел приводило к большим накладным рас­ходам при создании и эксплуатации автоматизированных информационных систем и в определенной степени сдерживало распространение вычислительной техники в процессах инфор­мационного обеспечения деятельности предприятий и органи­заций.

Основателем теории реляционных СУБД Е. Коддом было выдвинуто предложение о создании специального языка для об­щения(взаимодействия)пользователя-непрограммиста с базами данных.Идея такого языка сводилась к набору из нескольких фраз-примитивов английского языка («выбрать», «обновить», «вставить», «удалить»), через которые пользователь-непрограм­мист ставил бы «вопросы» к СУБД по своим информационным потребностям. В этом случае дополнительной функцией СУБД должна быть интерпретация этих «вопросов» на низкоуровне­вый язык машинных кодов для непосредственной обработки данных и предоставление результатов пользователю. Так роди­лась уже упоминавшаяся по структуре СУБД «машина данных». Иначе говоря, машина данных «понимает» язык базы данных и в результате разделяет собственно данные и задачи по их обра­ботке. В таком подходе взаимодействие пользователя с базой данных можно проиллюстрировать схемой, приведенной на рис. 4.2.

Рис. 4.2. Схема взаимодействия пользователя с базой данных через язык баз данных

В практику эти идеи впервые претворились в ходе реали­зации проекта System R(1975-1979 гг.) с участием еще одного известного специалиста по базам данных Криса Дейта. В ходе проекта System Rбыл создан язык SEQUEL,трансформировав­шийся впоследствии в язык структурированных запросов SQL (Structured Query Language).*При этом дополнительно к воз­можностям формирования «вопросов» к базе данных пользо­вателю также решено было предоставить и возможность опи­сания самой структуры данных, ввода данных и их изменения.

* Добавим также, что примерно в то же время в компании IBMбыл создан еще один реляционный язык—QBE (Query-By-Example),т. е. язык запросов по образцу, применявшийся впоследствии во многих коммерческих системах обработки таблич­ных данных и послуживший идеологической основой для создания визуальных «кон­структоров» запросов в современных СУБД.

Идеи языка SQLоказались настолько плодотворными, что он быстро завоевал популярность и стал широко внедряться в создаваемых в конце 70-х и в 80-х годах реляционных СУБД. Однако плодотворность идей языка SQLв отличие от первона­чального замысла проявилась вовсе не в том, что на нем стали «разговаривать» с базами данных пользователи, не являющие­ся профессиональными программистами. Язык SQL,в конеч­ном счете, позволил, как уже отмечалось,отделить низкоуров­невые функции по организации структуры и обработке дан­ных от высокоуровневых функций,позволяя при создании и эксплуатации банков данных сосредоточиваться на смысловом, а не техническом аспекте работы с данными.

Быстрое и массовое распространение языка SQLв реляци­онных СУБД к середине 80-х годов привело фактически к при­нятию его в качестве стандартапо организации и обработке данных. В 1986 г. Американским национальным институтом стандартов (ANSI)и Международной организацией по стандар­тизации (ISO)язык был стандартизирован де-юре, т. е. признан стандартным языком описания и обработки данных в реляци­онных СУБД. В 1989 г. ANSI/ISOбыла принята усовершенство­ванная версия SQL— SQL2,а в 1992 г. третья версия — SQL3.

Язык SQLотносится к так называемым декларативным (непроцедурным) языкам программирования. В отличие от про­цедурных языков (С, Паскаль, Фортран, Кобол, Бейсик) на нем формулируются предложения (инструкции) о том, «что сде­лать», но не «как сделать, как получить».Машина данныхв СУБД исполняет рольинтерпретатораи как раз строит ма­шинный код, реализующий способ получения результата, задаваемого SQL-инструкциями.

Язык SQLсостоит издвухчастей:

языка описания (определения) данных — DDL (Data Definition Language);

языка манипулирования данными — DML (Data Manipulation Language).

Синтаксис SQL-инструкцийвключает:

названиеинструкции (команду);

предложения,определяющие источники, условия опера­ции;

предикаты,определяющие способы и режимы отбора за­писей, задаваемых предложениями;

выражения,значения которых задают свойства и пара­метры выполнения инструкции и предложения.

Структуру SQL-инструкций можно разделить на две основ­ные части, схематично представленные на рис. 4.3.*

* Квадратные скобки, как это общепринято, означают необязательность элемента

Рис. 4.3. Структура SQL-инструкций.

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

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

Перечень SQL-инструкций разделяется по частям языка SQL.

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

CREATETABLE... —создать таблицу;

CREATEINDEX... —создать индекс;

ALTERTABLE... —изменить структуру ранее создан­ной таблицы;

DROP... —удалить существующую таблицу и базы данных.

В структуре инструкций CREATETABLE иALTERTABLE важную роль играет предложение CONSTRAINT(создать огра­ничения на значения данных) со следующими установками —NOT NULL(не допускаются нулевые, точнее «пустые» значе­ния по соответствующему полю, иначе говоря, определяется поле с обязательным заполнением), AUTOINC(поле с инкре­ментальным, т. е. последовательно возрастающим с каждой но­вой записью, характером значений) и PRIMARY KEY(опреде­ление для поля уникального, т. е. без повторов, индекса, что в результате задает режим заполнения данного поля с уникаль­ными неповторяющимися по различным строкам значениями).

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

SELECT... —выбрать данные из базы данных;

INSERT... —добавить данные в базу данных;

UPDATE... —обновить данные в базе данных;

DELETE... —удалить данные;

GRANT... —предоставить привилегии пользова­телю;

REVOKE... —отменить привилегии пользователю;

COMMIT... —зафиксировать текущую транзак­цию;

ROLLBACK... —прервать текущую транзакцию.

Важное значение имеют разновидности инструкции SELECT—SELECT... INTO ...(выбрать из одной или несколь­ких таблиц набор записей, из которого создать новую таблицу) и UNION SELECT,которая в дополнении с исходной инструк­цией SELECT (SELECT... UNION SELECT...) реализует опера­цию объединения таблиц.

Помимо предложения CONSTRAINTв SQL-инструкциях используются следующиепредложения:

FROM... —указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT;

WHERE... —определяет, какие записи из таблиц, пе­речисленных в предложении FROM,следует включить в резуль­тат выполнения инструкции SELECT, UPDAТЕ или DELETE;

GROUP BY... —объединяет записи с одинаковыми зна­чениями в указанном списке полей в одну запись;

НАVING... —определяет, какие сгруппированные за­писи отображаются при использовании инструкции SELECT с предложением GROUP BY;

IN... определяет таблицы в любой внешней базе данных, с которой ядро СУБД может установить связь;

ORDERBY... —сортирует записи, полученные в резуль­тате запроса, в порядке возрастания или убывания на основе значений указанного поля или полей.

В качестве источника данных по предложению FROM,помимо таблиц и запросов, могут использоваться также результатыопераций соединения таблиц в трех разновидностях—INNER JOIN... ON..., LEFT JOIN. ..ON... иRIGHT JOIN...ON...(внутреннее соединение, левое и правое внешнее соединение, соответственно*).

* Особенности разновидностей операций соединения рассматриваются в п. 4.3.2.1.2.

Предикатыиспользуются для задания способов и режи­мов использования записей, отбираемых на основе условий в инструкции SQL.Такими предикатами являются:

ALL... —отбирает все записи, соответству­ющие условиям, заданным в инст­рукции SQL,используется по умол­чанию;

DISTINCT... —исключает записи, которые содер­жат повторяющиеся значения в выбранных полях;

DISTINCTROW... —опускает данные, основанные на целиком повторяющихся записях, а не на отдельных повторяющихся полях;

ТОРп... —возвращаетпзаписей, находящих­ся в начале или в конце диапазона, описанного с помощьюпредложе­ния ORDER BY;

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

Язык SQL,конечно же, с точки зрения профессиональных программистов построен довольно просто, но, вместе с тем, как уже отмечалось, надежды на то, что на нем станут общаться с базами данных пользователи-непрограммисты, не оправдались. Причина этого, вероятно, заключается в том, что, несмотря на простоту, язык SQLвсе же является формализованным искус­ственным языком, осваивание и использование которого в боль­шинстве случаев тяготит конечных пользователей. Исследова­ния основ и способов интерфейса человека с компьютером, эр­гономических и психологических основ работы с компьютерной информацией, проведенные в конце 70-х и в 80-х годах, показа­ли, что пользователи-специалисты в конкретных предметных областях (а не в области вычислительной техники и програм­мирования) более склонны к диалогово-визуальным формам работы с вычислительными системами и компьютерной инфор­мацией.

Поэтому с конца 80-х годов в развитии СУБД наметились две тенденции:

• СУБД для конечных пользователей;

• СУБД для программистов (профессионалов).

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

В профессиональных СУБДязык базы данных (SQL)до­полняется элементами, присущими процедурным языкам про­граммирования — описателями и средствами работы с различ­ного типа переменными, операторами, функциями, процедура­ми и т. д. В результате формируется специализированный на работу с данными декларативно-процедурный язык высокого уровня, который встроен в СУБД (точнее надстроен над ядром СУБД). Такие языки называют«включающими»(см. рис. 2.1). На основе включающего языка разрабатываются полностью автономные прикладные информационные системы, реализу­ющие более простой и понятный для специалистов в опреде­ленной предметной области (скажем, в бухгалтерии) интерфейс работы с информацией.

С учетом этапов в развитии программных средств СУБД такие языки получили название языков четвертого поколе­ния — 4GL (Forth Generation Language).Языки 4GLмогут быть непосредственно встроены в сами СУБД, а могут существовать в видеотдельных сред программирования.В последнем слу­чае в таких средах разрабатываютсяприкладные частиинфор­мационных систем, реализующие только интерфейс и высоко­уровневые функции по обработке данных. За низкоуровневым, как говорят, «сервисом» к данным такие прикладные системы обращаются к SQL-серверам,являющимися отдельными спе­циализированными разновидностями СУБД. «Общение» меж­ду прикладными системами и SQL-серверами происходит со­ответственно на языке SQL.

Свои языки 4GL имеют практически все развитые профес­сиональные СУБД—Orac/e, SyBase, Informix, Ingres, DB2,оте­чественная СУБД ЛИНТЕР. Распространенными отдельными средами программирования для создания информационных си­стем в настоящее время являются системы Visual BasicфирмыMicrosoftи Delphiфирмы Borland Intemational.Кроме того, уже упоминавшиеся CASE-средства автоматизированного проекти­рования — PowerBuilderфирмы PowerSoft, Oracle Designer фирмы Oracle, SQLWindowsфирмы Guptaи др., также, как правило, имеют свои встроенные языки 4GL.

В заключение следует отметить, что в последнее время на­метилась тенденция встраивания развитых языков уровня 4GL и в СУБД для конечных пользователей. В качестве примера можно привести СУБД Accessфирмы Microsoft,имеющей один из наиболее развитых интерфейсов по созданию и работе с ба­зами данных для конечных пользователей, и в то же время ос­нащенной встроенным языком уровня 4GL — VBA (Visual Basic for Application),являющегося диалектом языка Visual Basic.