Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БД, ИС, ИТ (Беликова).doc
Скачиваний:
100
Добавлен:
27.05.2013
Размер:
528.38 Кб
Скачать

6. Языки баз данных. Обработка данных. Ввод-вывод данных. Запросы. Оптимизация запросов. Процедуры, правила (триггеры) и события в базах данных.

Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:

  • язык QBE(QueryByExample)- язык запросов по образцу;

  • SQL(StructuredQueryLanguage) - структурированный язык запросов.

Главное отличие между этими языками зак­лючается в способе формирования запросов: язык QBEпредполагает ручное или ви­зуальное формирование запроса, в то время как использованиеSQLозначает про­граммирование запроса.

Язык QВЕпозволяет задавать сложные запросы к БД путем запол­нения предлагаемой СУБД запросной формы. Такой способ задания запросов обеcпечивает высокую наглядность и не требует указания алгоритма выполнения операции - достаточно описать образец ожидаемого результата.

На языке QBE можно задавать запросы однотабличныеимноготабличные.

С помощью запросов на языке QBEможно выполнять следующие основные операции:

  • выборку данных;

  • вычисление над данными;

  • вставку новых записей;

  • удаление записей;

  • модификацию данных,

Результатом выполнения запроса является новая таблица, называемая ответной (первые две операции), или обновленная исходная таблица (остальные операции).

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

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

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

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

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

  • поиск, фильтрация и сортировка данных;

  • запросы к базе данных;

  • механизм реализации событий, правил (триггеров) и про­цедур в базе данных.

Запросыявляются наиболее распространенным видом об­работки данных.Запроспредставляет собойспецификацию (предписание) па специальном языке (языке базы данных) для обработки дан­ных.В реляционных СУБД запросы к базе данных выражают­ся на языкеSQL.

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

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

  • запросы на выборку данных;

  • запросы на изменение данных;

  • управляющие запросы.

Запросы на выборкуотносятся к одному из наиболее часто применяемых видов запросов. Данный вид запросов реализуетсяSQL-инструкциейSELECTс предложениемFROM. Результатомисполнения запроса на выборку являетсянабор данных,который представляетвременную таблицуданных со структурой (поля, их типы и параметры), определяемой параметрами запроса и параметрами полей таблиц, из которых выбираются данные. Результаты запросов на выборку по­мещаются в специальную временную таблицу, размещаемую на период исполнения («открытия») запроса в оперативной па­мяти.

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

При исполнении запроса на удаление за одну операциюосу­ществляетсяудаление группы записей из одной или нескольких таблиц.Запросы на удаление реализуютсяSQL-инструкциейDELETE:

DELETE(поля)FROM(таблица)WHERE(условие);

Запрос на обновление за одну операциювноситобщие из­менения в группу записей одной или нескольких таблиц.Реали­зуютсяSQL-инструкциейUPDATE.Запросы на обновления при­меняются тогда, когда необходимо осуществитьглобальные од­нотипные измененияв каком-либо наборе данных.

UPDATE(таблица)SET(поле = значение)WHERE(условие);

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

INTERINTOтаблицаSELECTполяFROMтаблицаWHERE(условие);

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

SELECTполяINTOтаблицаFROMтаблицаWHERE(условие);

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

Запросы на создание таблицыреализуютсяSQL-инструкциейCREATEТАВLЕ с ключевыми словами, определяющими типы полей (СНАRACTER,INTEGER,DATETIMEи т.д.), пред­ложениемCONSTRAINTдля создания ограничений на значе­ния полей или связей между таблицами, ключевым словомUNIQUE, задающим свойство уникальности индекса таблицы, а также ключевого словаPRIMERYKEY, определяющего ключевое поле создаваемой таблицы.

Запросы на добавление полей или индексовреализуютсяSQL-инструкциейALTERTABLEс использованием зарезервированных словADDCOLUMN(добавить поле) иADDCONSTRAIN(добавить индекс). Этим же запросом с помощью зарезервированного словаDROPCOLUMNможно удалить поле из существующей таблицы. Как правило, запросы на добавление полей также используются для создания внешних ключей, задающих связи-отношения между таблицами. С этой целью используются зарезервированные словаFOREIGNKEYиREFERENCES.

Запросы на удаление таблицы или индексареализуютсяSQL– инструкциейDROPTABLEс указанием имени удаляемой таблицы или индекса.

Запросы на создание индексареализуютсяSQL-инструкциейCREATEINDEXс использованием зарезервированного словаUNIQUEзапрета повтора значений в индексируемом поле инеобязательного предложения WITH с параметрами DISALLOWNULLиIGNORENULLдля запрета/разрешения нулевых (пустых) значений в индексируемом поле. Зарезерви­рованное словоPRIMERYпозволяет определить создаваемый индекс ключом таблицы (при этом создаваемый индекс по умол­чанию является уникальным, т. е. повторы значений не допус­каются).

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

В общей схеме обработки запросов выделяются:

  • Лексический и синтаксический разбор запроса;

  • Логическую оптимизацию;

  • Семантическую оптимизацию;

  • Построение процедурных планов выполнения запросов и выбор оптимального;

  • Непосредственное выполнение запроса.

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

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

  • Преобразования предикатов сравнения;

  • Преобразования порядка реляционных операций (соединения, объединения, выборки);

  • Приведение запроса с подчиненными запросами к запросам на соединение (JOIN).

Преобразования предикатов сравнения,улучшающие в целях оптимизации представление запроса, в свою очередь, разделяются на:

  • Приведение предикатов сравнения к каноническому виду;

  • Приведение логического условия сравнения к каноническому виду.

Каноническим называется такой вид предикатов сравнения, который содержит сравнениепростых выражений. Можно выделить три типа таких сравнений:

  • Имя поля Операция сравненияКонстантное арифметическое выражение;

  • Имя поля Операция сравненияАрифметическое выражение;

  • Арифметическое выражение Операция сравненияКонстантное арифметическое выражение.

В первом типе под «Константным арифметическим выражением» понимается такое выражение, которое содержит константы и так называемыеобъемлющие переменные, в любой момент имеющие одинаковое значение в отношении всех кортежей таблицы.

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

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

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

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

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

Каноническим представлением запросапо данным изnтаблиц называется запрос, содержащийn-1 предикат соедине­ния и не содержащий предикатов с подчиненными запросами.

Логическаяоптимизация запросов не учитываетсеманти­киконкретной базы данных, проявляемой в ограничениях це­лостности на значения полей таблиц и связей между ними. В результате ядро СУБД всякий раз при выполнении логически оптимизированного запроса еще и проверяет ограничения це­лостности. Часть записей-кортежей, сформированных по резуль­татам операций запроса, при этом может быть отвергнута имен­но по ограничениям целостности. Семантическая оптимиза­циязапросов основывается наслиянии внутреннего представления запроса и ограничений целостностиконкрет­ной базы данныхдо непосредственного выполнения запросаи призвана за счет совместной проверки ограничений целостно­сти и условий запроса сократить количество выполняемых опе­раций.

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

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

Суть идеи механизма событий, правил и процедурзаклю­чается в том, что они после определенияхранятсявмес­те с данными. Ядро СУБДпри любом изменении состоя­ния базы данных проверяет, не произошлили ранее «поставленные на учет»события,и, если они произошли, обес­печиваетпроверкусоответствующихправилизапусксоответ­ствующихпроцедуробработки.

Функционирование базы данных осуществляется следующим образом:

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

2. Для каждого события в базеданных определяются правила (триггеры) по проверке определенных условий состояния данных.;

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

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

4. Информационные системы (Беликова М.А.).