База данных. ЭУМК Базы данных. Пояснительная записка Теоретический раздел Практический раздел Раздел контроля знаний Вспомогательный раздел Пинск
Скачать 2.33 Mb.
|
Средства разработки программ работы с базами данных могут использоваться для создания разновидностей следующих программ: 1 клиентских программ; 2 серверов баз данных и их отдельных компонентов; 3 пользовательских приложений. Программы первого и второго видов малочисленны, так как предназначены, главным образом, для системных программистов. Пакетов третьего вида гораздо больше, но меньше, чем полнофункциональных СУБД. К средствам разработки пользовательских приложений относятся системы программирования, разнообразные библиотеки программ для различных языков программирования, а также пакеты автоматизации разработок (в том числе систем типа клиент-сервер). В числе наиболее распространенных можно назвать следующие инструментальные системы: Delphi и Power Builder (Borland), Visual Basic (Microsoft), SILVERRUN (Computer Advisers Inc.), S- Designor (SDP и Powersofr) и Erwin (Logic Works). По характеру использования СУБД делят на персональные и многопользовательские. Персональные СУБД обычно обеспечивают возможность создания персональных баз данных и недорогих приложений, работающих с ними. Персональные СУБД или разработанные с их помощью приложения могут выступать в роли клиентской части многопользовательской СУБД. К персональным СУБД, например, относятся Visual FoxPro, Paradox, Clipper, dBase, Access и др. Многопользовательские СУБД включают в себя сервер баз данных и клиентскую часть и, как правило, могут работать в неоднородной вычислительной среде (с разными типами ЭВМ и операционными системами). К многопользовательским СУБД относятся, например, СУБД Oracle и Informix. По используемой модели данных СУБД (как и базы данных) разделяются на иерархические, сетевые, реляционные, объектно- ориентированные и другие типы. Некоторые СУБД могут одновременно поддерживать несколько моделей данных. С точки зрения пользователя, СУБД реализует функции хранения, изменения (добавления, редактирования и удаления) и обработки информации, а также разработки и получения различных выходных документов. Для работы с хранящейся в базе данных информацией СУБД предоставляет программам и пользователям следующие два типа языков: 1 язык описания данных – высокоуровневый непроцедурный язык декларативного типа, предназначенный для описания логической структуры данных; 2 язык манипулирования данными – совокупность конструкций, обеспечивающих выполнение основных по работе с данными: ввод, модификацию и выборку данных по запросам. Названные языки в различных СУБД могут иметь отличия. Наибольшее распространение получили два стандартных языка: 1 QBE (Query By Example) – язык запросов по образцу: 2 SQL (Structured Query Language) – структурированный язык запросов. QBE, в основном обладает свойствами языка манипулирования данными, а SQL сочетает в себе свойства языков обоих типов – описания и манипулирования данными. СУБД также выполняет функции, которые называют низкоуровневыми: 1 управление данными во внешней памяти; 2 управление буферами оперативной памяти; 3 управление транзакциями; 4 ведение журнала изменений в базе данных; 5 обеспечение целостности и безопасности базы данных. Методы и алгоритмы управления данными являются «внутренним делом» СУБД и прямого отношения к пользователю не имеют. Качество реализации этой функции наиболее сильно влияет на эффективность работы специфических информационных систем, например, работающих с огромными базами данных, со сложными запросами, осуществляющих большие объемы обработки данных. Буферизация данных (кэширование) и, как следствие, реализация функции управления буферами оперативной памяти обусловлена тем, что объем оперативной памяти меньше объема внешней памяти. Буфер (кэш) представляет собой области оперативной памяти, предназначенную для ускорения обмена данными между внешней и оперативной памятью. В буферах временно хранятся фрагменты базы данных, данные из которых предполагается использовать при обращении к СУБД или планируется записать в базу данных после обработки. Обеспечение целостности базы данных составляет необходимое условие успешного функционирования базы данных, особенно для случая использования базы данных в сетях. Целостность базы данных – свойство базы данных, при наличии, которого база данных содержит полную и непротиворечивую информацию, необходимую и достаточную для корректного функционирования приложений. Ограничения целостности – набор условий, определяющие целостность базы данных. Поддержание целостности базы данных включает проверку целостности и ее восстановление в случае обнаружения противоречий в базе данных. Целостное состояние базы данных описывается с помощью ограничений целостности в виде условий, которым должны удовлетворять хранимые в базе данные. Примером таких условий может служить ограничение диапазонов возможных значений атрибутов объектов, сведения о которых хранятся в базе данных, или отсутствие повторяющихся записей в таблицах реляционных баз данных. Механизм транзакций используется в СУБД для поддержания целостности данных в базе. Транзакцией называется некоторая неделимая последовательность операций над данными базы данных, которая отслеживается СУБД от начала до завершения. Если по каким-либо причинам (сбои и отказы оборудования, ошибки в программном обеспечении, включая приложение) транзакция остается незавершенной, то она отменяется. Основным свойством транзакции является то, что до ее выполнения и после ее фиксации (завершения) база данных должна обладать свойством целостности, т.е. информация, хранящаяся в базе, должна быть полной и непротиворечивой. При попытке завершить транзакцию, которая привела к нарушению целостности БД, СУБД должна либо отменить транзакцию, либо включить механизмы восстановления целостности. Следует отметить, что целостность БД должна выполняться только до начала и после завершения (отмены) транзакции. В течение выполнения операций транзакции СУБД обычно не проверяет целостность БД. Кроме основного транзакции присущи следующие свойства: 1 атомарность (выполняются все входящие в транзакцию операции или ни одна); 2 сериализуемость (отсутствует взаимное влияние выполняемых в одно и то же время транзакций); 3 долговечность (даже крах системы не приводит к утрате результатов зафиксированной транзакции). Примером транзакций является операция перевода денег с одного счета на другой в банковской системе. Здесь необходим, по крайней мере, двухшаговый процесс. Сначала снимают деньги с одного счета, затем добавляют их к другому счету. Если хотя бы одно из действий не выполнится успешно, результат операции окажется неверным и будет нарушен баланс между счетами. Контроль транзакций важен в многопользовательских СУБД, где транзакции могут быть запущены параллельно. В последнем случае говорят о сериализуемости транзакций. Под сериализацией параллельно выполняемых транзакций понимается составление такого плана их выполнения (сериального плана), при котором суммарный эффект реализации транзакций эквивалентен эффекту их последовательного выполнения. При параллельном выполнении нескольких транзакций возможно возникновение конфликтов (блокировок), разрешение которых является функцией СУБД. При обнаружении таких случаев обычно производится «откат» путем отмены изменений, произведенных одной или несколькими транзакциями. Все изменения в базе данных должны производиться с помощью транзакций. Ведение журнала транзакций в базе данных (журнализация изменений) выполняется СУБД для обеспечения надежности хранения данных в базе при наличии аппаратных сбоев и отказов, а также ошибок в программном обеспечении. Журнал СУБД – это особая база данных или часть основной базы данных, непосредственно недоступная пользователю и используемая для записи информации обо всех изменениях базы данных. В различных СУБД в журнал могут заноситься записи, соответствующие изменениям в СУБД на разных уровнях: от минимальной внутренней операции модификации страницы внешней памяти до логической операции модификации базы данных (например, вставки записи, удаления столбца, изменения значения в поле). Для эффективной реализации функции ведения журнала изменений в базе данных необходимо обеспечить повышенную надежность хранения и поддержания в рабочем состоянии самого журнала. Иногда для этого в системе хранят несколько копий журнала. Обеспечение безопасности достигается в СУБД шифрованием прикладных программ, данных, защиты паролем, поддержкой уровней доступа к базе данных и к отдельным ее элементам (таблицам, формам, отчетам и т.д.). СУБД должна обеспечивать функцию словаря данных. Словарь данных является базой данных, но не пользовательской, а системной. Словарь данных содержит данные о данных (так называемые метаданные). В словаре, например, могут содержаться объектная и исходная формы различных схем (внешней, концептуальной, внутренней). Отображение схем (исходная и объектная форма) также будут сохранены в словаре. Расширенный словарь будет включать перекрестные ссылки, показывающие, например, какие из приложений какую часть БД используют, какие отчеты требуются тем или иным пользователям, какие терминалы подключены к системе и т.д. Словарь должен быть интегрирован в определяемую им БД, а значит, должен содержать описание самого себя. Должна быть реализована возможность обращения к словарю, как и к любой БД, например, для того чтобы узнать, какие приложения и(или) пользователи будут затронуты при предполагаемом внесении изменений в систему. 3. Использование языков запросов. Стандарты, структура, возможности и применение языка SQL 3.1.Языки запросов 3.2. Язык SQL, основные конструкции и работа с данными 3.3. Пользовательские процедуры и функции 3.4. Использование курсоров 3.1.Языки запросов Хранимые в базе данные можно обрабатывать вручную, последовательно просматривая и редактируя данные в таблицах, с помощью имеющихся в СУБД соответствующих средств. Для повышения эффективности обработки данных применяют запросы, позволяющие производить множественную обработку данных. Запросы позволяют одновременно вводить, редактировать и удалять множество записей, а также выбирать данные из таблиц. Запрос представляет собой специальным образом описанное требование, определяющее состав производимых над базой данных операций по выборке, удалению или модификации хранимых данных. Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов: язык QBE (Query By Example) – язык запросов по образцу; SQL (Structured Query Language) – структурированный язык запросов. По возможностям манипулирования данными при описании запросов указанные языки практически эквивалентны. Главное отличие между ними заключается в способе формирования запросов: язык QBE предполагает ручное или визуальное формирование запроса, в то время как использование SQL означает программирование запроса. Характеристика языка QBE. Теоретической основой языка QBE является реляционное исчисление с переменными доменами. Язык QBE позволяет задавать сложные запросы к базе данных путем заполнения предлагаемой СУБД запросной формы. Такой способ задания запросов обеспечивает высокую наглядность и не требует указания алгоритма выполнения операции – достаточно описать образец желаемого результата. В каждой из современных реляционных СУБД имеется свой вариант языка QBE. На языке QBE можно задавать однотабличные и многотабличные запросы. С помощью запросов на языке QBE можно выполнять следующие основные операции: выборку данных; вычисления над данными; вставку новых записей; удаление записей; модификацию (изменение) данных. Результатом выполнения запроса является новая таблица, называемая ответной (первые две операции), или обновленная исходная таблица (остальные операции). Выборка, вставка, удаление и модификация могут производиться безусловно или в соответствии с условиями, задаваемыми с помощью логических выражений. Вычисления над данными задаются с помощью арифметических выражений и порождают в ответных таблицах новые поля, называемые вычисляемыми. В современных СУБД, например, в Access и Visual FoxPro, многие действия по подготовке запросов с помощью языка QBE выполняются визуально с помощью мыши. Перспективы развития языка QBE. Анализ современных СУБД позволяет предположить следующие направления развития языка QBE: Повышение наглядности и удобства. Появление средств, соответствующих новым возможностям СУБД, например, формулировка неточных или нечетких запросов, манипулирование большими объемами данных. Использование новых типов данных (графических, аудио-, видео- и др.). Применение в ближайшем будущем ограниченного естественного языка формулировки запросов. В более отдаленной перспективе использование речевого ввода запросов. Язык SQL – стандартный язык запросов по работе с реляционными базами данных. Язык SQL появился после реляционной алгебры, и его прототип был разработан в конце 70-х годов в компании IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R. В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом «де-факто» для языков манипулирования данными в реляционной СУБД. Первый международный стандарт языка SQL был принят в 1989 г. (SQL89 или SQL1). В конце 1992 г. был принят новый международный стандарт языка SQL (SQL92 или SQL2). В настоящее время большинство производителей СУБД внесли изменения в свои продукты так, чтобы они в большей степени удовлетворяли стандарту SQL2. В 1999 году появился новый стандарт, названный SQL3. Стандарт SQL3 соответствует качественным серьезным преобразованиям. В SQL3 введены новые типы данных, при этом предполагается возможность задания сложных структурированных типов данных, которые в большой степени соответствуют объектной ориентации. Наконец, добавлен раздел, который вводит стандарты на события и триггеры. В стандарте определены возможности четкой спецификации триггеров как совокупности события и действия. В качестве действия могут выступать не только последовательность операторов SQL, но и операторы управления ходом выполнения программы. В рамках управления транзакциями произошел возврат к старой модели транзакций, допускающей точки сохранения, и возможность указания в операторе отката ROOLBACK точек возврата не только в начало транзакции, но и в промежуточную ранее сохраненную точку. Язык SQL предназначен для выполнения операций над таблицами (создание, удаление, изменение структуры) и над данными таблиц (выборка, изменение, добавление и удаление), а также некоторых сопутствующих операций. SQL является непроцедурным языком и не содержит операторов управления, организации подпрограмм, ввода-вывода и т.п. В связи с этим SQL автономно не используется, обычно он погружен в среду встроенного языка программирования СУБД (например, FoxPro СУБД Visual FoxPro, ObjectPAL СУБД Paradox, Visual Basic for Application СУБД Access). В современных СУБД с интерактивным интерфейсом можно создавать запросы, используя другие средства, например QBE. Однако применение SQL зачастую позволяет повысить эффективность обработки данных в базе. Например, при подготовке запроса в среде Access можно перейти из окна Конструктора запросов (формулировки запроса по образцу на языке QBE) в окно с эквивалентным оператором SQL. Язык SQL не обладает функциями полноценного языка разработки, а ориентирован на доступ к данным, поэтому его включают в состав средств разработки программ. В этом случае его называют встроенным SQL. Стандарт языка SQL поддерживают современные реализации следующих языков программирования: PL/1, Ada, C, COBOL, Fortran, Pascal. В специализированных системах разработки приложений типа клиент- сервер среда программирования, кроме того, обычно дополнена коммуникационными средствами (установление и разъединение соединений с серверами БД, обнаружение и обработка возникающих в сети ошибок и т.д.), средствами разработки пользовательских интерфейсов, средствами проектирования и отладки. Различаются два основных метода использования встроенного SQL: статистический и динамический. При статическом использовании языка (статический SQL) в тексте программы имеются вызовы функций языка SQL, которые жестко включаются в выполняемый модуль после компиляции. При динамическом использовании языка (динамический SQL) предполагается динамическое построение вызовов SQL-функций и интерпретация этих вызовов, например, обращение к данным удаленной базы, в ходе выполнения программы. Основным назначением языка SQL (как и других языков для работы с базами данных) является подготовка и выполнение запросов. В результате выборки данных из одной или нескольких таблиц может быть получено множество записей, называемое представлением. Представление, по существу является таблицей, формируемой в результате выполнения запроса. Оно является разновидностью хранимого запроса. По одним и тем же таблицам можно построить несколько представлений. Само представление описывается путем указания идентификатора представления и запроса, который должен быть выполнен для его получения. Для удобства работы с представлениями в язык SQL введено понятие курсора. Курсор представляет собой своеобразный указатель, используемый для перемещения по наборам записей при их обработке. Описание и использование курсора в языке SQL выполняется следующим образом. В описательной части программы выполняют связывание переменной типа курсор (CURSOR) с оператором SQL (обычно с оператором SELECT). В выполняемой части программы производится открытие курсора (OPEN <имя курсора>), перемещение курсора по записям (FETCH <имя курсора>…), сопровождаемое соответствующей обработкой, и, наконец, закрытие курсора (CLOSE <имя курсора>). 3.2. Язык SQL, основные конструкции и работа с данными В отличие от реляционной алгебры, где были представлены только операции запросов к БД, SQL является полным языком. Операторы языка SQL можно условно разделить на два подъязыка: язык определения данных (Data Definition Language – DDL) и язык манипулирования данными (Data Manipulation Language – DML). Основные операторы языка SQL представлены в табл.3.1. Кроме того, язык содержит операторы управления транзакциями, администрирования данных и управления курсором. Таблица 3.1 Операторы языка SQL Вид Оператор Назначение Действие DDL CREATE TABLE Создание таблицы Создание новой таблицы в БД DROP TABLE Удаление таблицы Удаление таблицы из БД ALTER TABLE Изменение структуры таблицы Изменение структуры существующей таблицы или ограничений целостности, задаваемые для данной таблицы CREATE VIEW Создание представления Создание виртуальной таблицы, соответствующей некоторому SQL- запросу DROP VIEW Удаление представления Удаление ранее созданного представления ALTER VIEW Изменение представления Изменение ранее созданного представления CREATE INDEX Создание индекса Создание индекса для некоторой таблицы для обеспечения быстрого доступа по атрибутам, входящим в индекс DROP INDEX Удаление индекса Удаление ранее созданного индекса DML SELECT Выборка записей Формирование результирующего отношения, соответствующего запросу (оператор, заменяющий все операторы реляционной алгебры) UPDATE Изменение записей Обновление значения одного или нескольких столбцов в одной или нескольких строках, соответствующих условиям фильтрации INSERT Вставка новых записей Вставка одной строки в базовую таблицу. Допустимы модификации оператора, при которых сразу несколько строк могут быть перенесены из одной таблицы или запроса в базовую таблицу DELETE Удаление записей Удаление одной или нескольких строк, соответствующих условиям фильтрации, из базовой таблицы. Применение оператора согласуется с принципами поддержки целостности, поэтому этот оператор не всегда может быть выполнен корректно, даже если синтаксически он записан правильно |