В начало

Лекция 

Управление реляционными БД.

Языки определения данных и языки манипулирования данными. Способы выражения запросов: процедурный и форм-ориентированный

 

 

Управление базами данных осуществляется средствами лингвистического обеспечения СУБД. Внутренний язык СУБД для работы с данными состоит из двух частей (слайд 2):

1)   языка определения данных (Data Definition Language DDL), который используется для определения схемы базы данных

2)   языка манипулирования данными (Data Manipulation Language DML) – для чтения и обновления данных, хранимых в базе.

Эти языки называются подъязыками данных, поскольку в них отсутствуют конструкции для выполнения всех вычислительных операций, обычно используемых в языках программирования высокого уровня, таких как условные операторы или операторы цикла. Во многих СУБД предусмотрена возможность внедрения операторов подъязыка данных в программы, написанные на таких языках программирования высокого уровня, как COBOL, Fortran, Pascal, Ada, С, C++, Java или Visual Basic. В этом случае язык высокого уровня принято называть базовым языком (host language). Перед компиляцией файла программы на базовом языке, содержащей внедренные операторы подъязыка данных, такие операторы удаляются и заменяются вызовами функций. Затем этот предварительно обработанный файл обычным образом компилируется с помещением результатов в объектный модуль, который компонуется с библиотекой, содержащей вызываемые в программе функции СУБД. После этого полученный программный текст готов к выполнению. Помимо механизма внедрения, для большинства подъязыков данных предоставляются также средства интерактивного выполнения операторов, вводимых пользователем непосредственно с терминала.

 

15.1. Язык определения данных – DDL (слайд 3)

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

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

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

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

 

15.2. Язык управления данными – DML

DML - язык, содержащий набор операторов для поддержки основных операций манипулирования содержащимися в базе данными (слайд 4).

К операциям управления данными относятся:

    вставка в базу данных новых сведений;

    модификация сведений, хранимых в базе данных;

    извлечение сведений, содержащихся в базе данных;

    удаление сведений из базы данных.

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

Часть непроцедурного языка DML, которая отвечает за извлечение данных, называется языком запросов. Язык запросов можно определить как высокоуровневый узкоспециализированный язык, предназначенный для удовлетворения различных требований по выборке информации из базы данных. В этом смысле термин «запрос» зарезервирован для обозначения оператора извлечения данных, выраженного с помощью языка запросов. Термины «язык запросов» и «язык управления данными» часто используются как синонимы, хотя с технической точки зрения, это некорректно.

Языки DML имеют разные базовые конструкции извлечения данных. Существуют два типа языков DML (слайд 5): процедурный и непроцедурный. Основное различие между ними заключается в том, что процедурные языки указывают то, как можно получить результат оператора языка DML, тогда как непроцедурные языки описывают то, какой результат будет получен. Как правило, в процедурных языках записи рассматриваются по отдельности, тогда как непроцедурные языки оперируют с целыми наборами записей.

 

15.2.1. Процедурные языки DML

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

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

 

15.2.2. Непроцедурные языки DML

Непроцедурный язык DML это язык, который позволяет указать лишь то, какие данные требуются, но не то, как их следует извлекать.

Непроцедурные языки DML позволяют определить весь набор требуемых данных с помощью одного оператора выборки или обновления. С помощью непроцедурных языков DML пользователь указывает, какие данные ему нужны, без определения способа их получения. СУБД транслирует выражение на языке DML в процедуру (или набор процедур), которая обеспечивает манипулирование затребованным набором записей. Такой подход освобождает пользователя от необходимости знать подробности внутренней реализации структур данных и особенности алгоритмов, используемых для извлечения и возможного преобразования данных. В результате работа пользователя становится в определенной степени независимой от данных. Непроцедурные языки часто также называют декларативными языками. Реляционные СУБД в той или иной форме обычно включают поддержку непроцедурных языков манипулирования данными – чаще всего это язык структурированных запросов SQL (Structured Query Language) или язык запросов по образцу QBE (Query-by-Example). Непроцедурные языки обычно проще понять и использовать, чем процедурные языки DML, поскольку пользователем выполняется меньшая часть работы, а СУБД – большая.

 

15.3. Языки 4GL

Аббревиатура 4GL представляет собой сокращенный английский вариант написания термина язык четвертого поколения (Fourth-Generation Language). Четкого определения этого понятия не существует, хотя, по сути, речь идет о некотором стенографическом варианте языка программирования. Если для организации некоторой операции с данными на языке третьего поколения (3GL) типа COBOL потребуется написать сотни строк кода, то для реализации этой же операции на языке четвертого поколения достаточно 10-20 строк.

В то время как языки третьего поколения являются процедурными, языки 4GL выступают как непроцедурные, поскольку пользователь определяет, что должно быть сделано, но не сообщает, как именно должен быть достигнут желаемый результат. Предполагается, что реализация языков четвертого поколения будет в значительной мере основана на использовании компонентов высокого уровня, которые часто называют «инструментами четвертого поколения». Пользователю не требуется определять все этапы выполнения программы, необходимые для решения поставленной задачи, а достаточно лишь задать нужные параметры, на основании которых упомянутые выше инструменты автоматически осуществят генерацию приложения. Ожидается, что языки четвертого поколения позволят повысить производительность работы на порядок, но за счет ограничения типов задач, которые можно будет решать с их помощью. Выделяют следующие типы языков четвертого поколения (слайд 6):

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

       специализированные языки, например языки электронных таблиц и баз данных;

       генераторы приложений, которые при создании приложений обеспечивают определение, вставку, обновление или извлечение сведений из базы данных;

       языки очень высокого уровня, предназначенные для генерации кода приложений.

В качестве примеров языков четвертого поколения можно указать упоминавшиеся выше языки SQL и QBE. Рассмотрим вкратце некоторые другие типы языков четвертого поколения.

 

15.3.1. Генераторы форм

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

 

15.3.2. Генераторы отчетов

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

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

 

15.3.3. Генераторы графического представления данных

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

 

15.3.4. Генераторы приложений

Генератор приложений представляет собой инструмент для создания программ, взаимодействующих с базой данных. Применяя генератор приложений, можно сократить время, необходимое для проектирования полного объема требуемого прикладного программного обеспечения. Генераторы приложений обычно состоят из предварительно созданных модулей, содержащих фундаментальные функции, которые требуются для работы большинства программ. Эти модули, обычно создаваемые на языках высокого уровня, образуют «библиотеку» доступных функций. Пользователь указывает, какие задачи программа должна выполнить, а генератор приложений определяет, как: их следует выполнить.

 

15.4. SQL

Изначально создаваемый как инструмент для выборки и представления данных, содержащихся в базе данных, SQL сегодня представляет собой нечто гораздо большее. Несмотря на то, что выборка данных по-прежнему остается одной из наиболее важных функций SQL, сейчас этот язык используется для реализации всех функциональных возможностей, необходимых для управления БД, в том числе и для (слайд 7):

-     организации данных - SQL позволяет определять и изменять структуру представления данных, а также устанавливать отношения;

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

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

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

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

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

 

Официальный стандарт языка SQL был опубликован в 1986 году Американским институтом национальных стандартов (ANSI) и Международной организацией по стандартам (International Standards Organization ISO), а в 1989 и 1992 годах значительно расширен (слайд 8). Стандарт X/OPEN для переносимой среды программирования на основе операционной системы UNIX также включает в себя SQL в качестве языка для доступа к базам данных. Консорциум поставщиков компьютерного оборудования и баз данных (SQL Access Group) определил для SQL стандартный интерфейс вызовов функций, который является основой протокола ODBC компании Microsoft и входит также в стандарт X/OPEN. Эти стандарты de facto являются официальным одобрением SQL, и именно они ускорили завоевание им рынка.

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

Чтобы заполнить эти пробелы, комитет ANSI продолжил свою работу и создал проект нового, более жесткого стандарта SQL2. В отличие от стандарта 1989 года, проект SQL2 предусматривал возможности, выходящие за рамки таковых, уже существующих в реальных коммерческих продуктах.

Перечислим эти отличия SQL2.

Коды ошибок. В стандарте SQL2 определены стандартные коды ошибок, которые возвращают операторы SQL при возникновении ошибок.

Типы данных. В стандарте SQL2 упомянуты многие стандартные типы данных (например, символьные строки переменной длины, дата и время, а также денежные единицы), однако отсутствуют «новые» типы данных, такие как графические и мультимедийные объекты.

Системные таблицы. В стандарте SQL-89 умалчивается о системных таблицах, в которых содержится информация о структуре самой базы данных. Поэтому каждый поставщик создавал собственные системные таблицы, и их структура отличается даже в четырех реализациях SQL компании IBM. В SQL2 системные таблицы стандартизированы.

Интерактивный SQL. В стандарте SQL-89 определен только программный SQL, используемый прикладной программой, но не интерактивный SQL. Например, оператор SELECT, предназначенный для выполнения запросов к базе данных в интерактивном режиме, в стандарте отсутствует.

Программный интерфейс. В стандарте SQL2 определен интерфейс встроенного SQL для некоторых языков программирования, но не интерфейс вызова функций.

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

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

Последовательность сравнения. Стандарт SQL2 позволяет программе или пользователю указывать требуемую последовательность сортировки результатов запроса.

Структура базы данных. В стандарте SQL-89 определен язык, операторы которого используются уже после того, как база данных была открыта и подготовлена к работе. Детали именования баз данных и первоначального подключения к ним в разных реализациях сильно отличаются или несовместимы. Стандарт SQL2 в некоторой степени унифицирует этот процесс, хотя и не может полностью ликвидировать все отличия.

 

Основными направлениями развития SQL2 (и принятие SQL3) являются:

-         стандартизация интерфейсов вызова функций;

-         стандартизация хранимых процедур;

-         добавление объектно-ориентированных возможностей.

 

15.5. Использование средств QBE для создания запросов на выборку данных

Язык QBE (Query By Example) является языком DML и позволяет сформулировать запрос на управление данными «по образцу». Для реляционных БД язык QBE предоставляет средства конструирования запроса в виде таблицы, в которой столбцами являются атрибуты одной или нескольких таблиц БД, участвующие в совокупном критерии отбора данных и/или отображающиеся как результат запроса. Простое условие отбора при этом формулируется отдельно для каждого атрибута, а составной критерий отбора получается путем соединения простых условий предопределенными логическими операциями (AND или OR).

Рассмотрим язык QBE СУБД Microsoft Access на примере запроса на выборку данных (слайд 9). Запросы на выборку данных являются самым распространенным типом запросов. Они предназначены для извлечения данных из одной или нескольких таблиц и отображения полученных результатов в виде таблицы с выбранными данными, допускающей обновление содержащихся в ней записей (с некоторыми ограничениями). Запросы на выборку допускают группировку записей, а также вычисление сумм, счетчиков, средних значений и применение агрегирующих функций других типов.

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

В начале создания нового запроса к базе данных открывается окно «Запрос на выборку» и на экран выводится диалоговое окно «добавление таблицы», которое в нашем случае будет содержать список таблиц и запросов, существующих в базе данных «Сессия». В этом окне пользователю необходимо указать таблицы и/или запросы, содержащие интересующие его данные.

Окно «Запрос на выборку» представляет собой графический инструмент языка QBE. Для конструирования образца интересующих пользователя записей в графической среде этого окна для выборки, перетаскивания или манипулирования содержащимися в нем объектами можно использовать мышь. Определение полей и записей, которые должны быть включены в результаты запроса, производится в таблице языка QBE.

При создании запроса в таблице формирования запроса QBE СУБД Microsoft Access неявно генерирует для него эквивалентный оператор SQL. Просмотреть и отредактировать этот оператор SQL можно в окне SQL.

Задание критериев отбора. Критериями отбора называют ограничения, налагаемые на результаты выполнения запроса с целью выборки только тех полей или записей данных, которые представляют интерес для пользователя. Например, для извлечения данных о студентах, сдавших сессию с оценкой «4» или «5», средствами QBE может быть подготовлен запрос, показанный на слайде (слайд 10). После выполнения этого запроса полученные результаты будут отображены в таблице данных, содержащей только указанные столбцы.

Можно усложнить условие отбора, вводя дополнительные критерии для того же поля или для других полей. Если поместить некоторые выражения в несколько ячеек строки «Условие отбора», СУБД Access соединит их, используя логическую операцию AND (И) или OR (Или). Если выражения в разных ячейках будут введены в одну и ту же строку таблицы QBE, СУБД Access использует для их соединения операцию AND. Это означает, что в результирующий набор будут помещены только записи, которые отвечают одновременно всем указанным критериям отбора. Если выражения будут помещены в разные строки сетки QBE, СУБД Microsoft Access использует для их соединения логическую операцию OR. В этом случае в результирующий набор попадут любые записи, отвечающие хотя бы одному из указанных условий отбора.

Текст эквивалентного оператора SQL для данного запроса показан на слайде (слайд 11).