Опубликован: 04.05.2010 | Уровень: для всех | Доступ: платный
Лекция 7:

Проектирование баз данных и работа с ними Веб-приложений. Введение в БД, SQL Server, ADO.NET

9.1.5. Технологии для доступа к базам данных в Веб

При обеспечении Веб-доступа к существующим БД, возможен ряд путей – комплексов технологических и организационных решений [25]. Практика использования Веб-технологии для доступа к существующим БД предоставляет широкий спектр технологических решений, по-разному связанных между собой – перекрывающих, взаимодействующих и т.д. Выбор конкретных решений при обеспечении доступа зависит от специфики конкретной СУБД и от ряда других факторов, как то: наличие специалистов, способных с минимальными издержками освоить определенную ветвь технологических решений, существование других БД, Веб-доступ к которым должен осуществляться с минимальными дополнительными затратами и т.д.

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

9.1.5.1. Преобразование содержимого БД в статические документы

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

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

9.1.5.2. Динамическое создание гипертекстовых документов

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

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

9.1.5.3. Создание информационного хранилища на основе СУБД

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

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

9.1.6. Язык SQL

SQL является инструментом, предназначенным для обработки и чтения данных, содержащихся в компьютерной базе данных. SQL – это сокращенное название структурированного языка запросов (Structured Query Language) [26]. SQL основывается на реляционной алгебре.

Вопреки существующим заблуждениям, SQL в его чистом (базовом) виде является информационно-логическим языком, а не языком программирования [27]. Вместе с тем стандарт языка спецификацией SQL/PSM предусматривает возможность его процедурных расширений, с учетом которых язык уже вполне может рассматриваться в качестве языка программирования.

На рис. 9.4 изображена схема работы SQL

Применение SQL для доступа к базе данных

Рис. 9.4. Применение SQL для доступа к базе данных

SQL используется для реализации всех функциональных возможностей, которые СУБД предоставляет пользователю, а именно:

  • Организация данных. SQL дает пользователю возможность изменять структуру представления данных, а также устанавливать отношения между элементами базы данных.
  • Чтение данных. SQL дает пользователю или приложению возможность читать из базы данных содержащиеся в ней данные и пользоваться ими.
  • Обработка данных. SQL дает пользователю или приложению возможность изменять базу данных, т.е. добавлять в нее новые данные, а также удалять или обновлять уже имеющиеся в ней данные.
  • Управление доступом. С помощью SQL можно ограничить возможности пользователя по чтению и изменению данных и защитить их от несанкционированного доступа.
  • Совместное использование данных. SQL координирует совместное использование данных пользователями, работающими параллельно, чтобы они не мешали друг другу.
  • Целостность данных. SQL позволяет обеспечить целостность базы данных, защищая ее от разрушения из-за несогласованных изменений или отказа системы.

Таким образом, SQL является достаточно мощным языком для взаимодействия с СУБД.

Все операторы SQL в общем виде можно представить так, как это показано на рис. 9.5.

Общий вид оператора SQL

Рис. 9.5. Общий вид оператора SQL

Каждый оператор SQL начинается с глагола, представляющего собой ключевое слово, определяющее, что именно делает этот оператор ( SELECT, INSERT, DELETE...). В операторе содержатся также предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др. Структура предложения зависит от его типа – ряд предложений содержит имена таблиц или полей, некоторые могут содержать дополнительные ключевые слова, константы или выражения.

Язык SQL делится на несколько частей [27, 28]:

  • операторы определения данных ( Data Definition Language, DDL, табл. 9.2);
    Таблица 9.2. Операторы определения данных
    Оператор Описание
    CREATE TABLE Применяется для добавления новой таблицы к базе данных
    DROP TABLE Применяется для удаления таблицы из базы данных
    ALTER TABLE Применяется для изменения структуры имеющейся таблицы
    CREATE VIEW Применяется для добавления нового представления к базе данных
    DROP VIEW Применяется для удаления представления из базы данных
    CREATE INDEX Применяется для создания индекса для данного поля
    DROP INDEX Применяется для удаления существующего индекса
    CREATE SCHEMA Применяется для создания новой схемы в базе данных
    DROP SCHEMA Применяется для удаления схемы из базы данных
    CREATE DOMAIN Применяется для создания нового домена
    ALTER DOMAIN Применяется для переопределения домена
    DROP DOMAIN Применяется для удаления домена из базы данных
  • операторы манипуляции данными ( Data Manipulation Language, DML,табл. 9.3);
    Таблица 9.3. Операторы манипуляции данными
    Оператор Описание
    SELECT Применяется для выбора данных
    INSERT Применяется для добавления строк к таблице
    DELETE Применяется для удаления строк из таблицы
    UPDATE Применяется для изменения данных
  • операторы определения доступа к данным ( Data Control Language, DCL,табл. 9.4);
    Таблица 9.4. Операторы определения доступа к данным
    Оператор Описание
    GRANT Применяется для присвоения привилегии
    REVOKE Применяется для отмены привилегии
  • операторы управления транзакциями ( Transaction Control Language, TCL,табл. 9.5);
    Таблица 9.5. Операторы управления транзакциями
    Оператор Описание
    COMMIT Применяется для завершения транзакции и сохранения изменений в базе данных
    ROLLBACK Применяется для отката транзакции и отмены изменений в базе данных
    SET TRANSACTION Применяется для установки параметров доступа к данным в текущей транзакции
  • операторы определения курсора (Cursor Control Language, CCL, табл. 9.6).
    Таблица 9.6. Операторы определения курсора
    Оператор Описание
    DECLARE CURSOR Применяется для определения курсора для запроса
    EXPLAIN Применяется для описания плана запроса. Этот оператор представляет собой расширение SQL для Microsoft SQL Server 7.0. Он не обязан выполняться в других СУБД. Например, в случае Oracle следует использовать оператор EXPLAIN PLAN
    OPEN CURSOR Применяется для открытия курсора при получении результатов запроса
    FETCH Применяется для получения строки из результатов запроса
    CLOSE CURSOR Применяется для закрытия курсора
    PREPARE Применяется для подготовки оператора SQL для выполнения
    EXECUTE Применяется для выполнения оператора SQL
    DESCRIBE Применяется для описания подготовленного запроса

Достоинства SQL [26, 27]:

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

Недостатки [27]:

  • Несоответствие реляционной модели данных [29]:
    • повторяющиеся строки ;
    • неопределенные значения ( nulls );
    • явное указание порядка колонок слева направо;
    • колонки без имени и дублирующиеся имена колонок;
    • отсутствие поддержки свойства "=" ;
    • использование указателей;
    • высокая избыточность;
  • Сложность;
  • Отступления от стандартов в конкретных реализациях СУБД;
  • Сложность работы с иерархическими структурами.

Поскольку SQL не является языком программирования, вводимые разными производителями расширения касались в первую очередь процедурных расширений. Это хранимые процедуры (stored procedures) и процедурные языки-"надстройки". Практически в каждой СУБД применяется свой процедурный язык. Стандарт для процедурных расширений представлен спецификацией SQL/PSM). Перечень процедурных расширений для самых популярных СУБД приведен в табл. 9.7.

Таблица 9.7. Процедурные расширения популярных СУБД
СУБД Расширение
InterBase/Firebird PSQL – Procedural SQL
IBM DB2 SQL PL – SQL Procedural Language (расширяет SQL/PSM)
MS SQL Server/ Sybase ASE Transact-SQL
MySQL SQL/PSM – SQL/Persistent Stored Module (соответствует стандарту SQL:2003)
Oracle PL/SQL – Procedural Language/SQL (основан на языке Ada)
PostgreSQL PL/pgSQL – Procedural Language/PostgreSQL Structured Query Language (очень похож на Oracle PL/SQL)

9.1.7. Ключевые термины

База данных, Система управления базами данных, Модель данных, Иерархическая модель данных, Сетевая модель данных, Реляционная модель данных, Постреляционная модель данных, Объектно-ориентированная модель данных, Объектно-реляционная модель данных, Таблицы, Столбы, Строки, Первичный ключ, Внешний ключ, Индексирование, Нормальная форма, Нормализация, Транзакция, ACID, Проектирование баз данных, SQL.

Владимир Тадеуш
Владимир Тадеуш
Украина
Кирилл Дубовик
Кирилл Дубовик
Россия, Петрозаводск