Проектирование СУБД

Основные типы данных языка SQL. Технология "клиент-сервер". Виды моделей серверов. Агрегатные и итоговые функции. Транзакции, объекты серверных СУБД. Позапросы и интеграция СУБД в Web, обзор серверных СУБД. Достоинства и недостатки спецификации CGI.

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 28.12.2013
Размер файла 162,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Изменение и удаление данных

Для выполнения изменений с помощью курсора необходимо выполнить команду UPDATE в следующем формате:

UPDATE имя_таблицы SET {имя_столбца={

DEFAULT | NULL | выражение}}[,... n]

WHERE CURRENT OF {{[GLOBAL] имя_курсора}

|@имя_переменной_курсора}

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

Для удаления данных посредством курсора используется команда DELETE в следующем формате:

DELETE имя_таблицы

WHERE CURRENT OF {{[GLOBAL] имя_курсора}

|@имя_переменной_курсора}

В результате будет удалена строка, установленная текущей в курсоре.

Закрытие курсора

CLOSE {имя_курсора | @имя_переменной_курсора}

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

Освобождение курсора

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

DEALLOCATE { имя_курсора |

@имя_переменной_курсора }

Для контроля достижения конца курсора рекомендуется применять функцию: @@FETCH_STATUS

Функция @@FETCH_STATUS возвращает:

0, если выборка завершилась успешно;

-1, если выборка завершилась неудачно вследствие попытки выборки строки, находящейся за пределами курсора;

-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.

DECLARE abc CURSOR SCROLL FOR

SELECT * FROM Клиент

Пример 13. 1. Объявление курсора.

DECLARE @MyCursorCURSOR

SET @MyCursor=CURSOR LOCAL SCROLL FOR

SELECT * FROM Клиент

Пример 13. 2. Использование переменной для объявления курсора.

DECLARE abc CURSOR GLOBAL SCROLL FOR

SELECT * FROM Клиент

OPEN abc

Пример 13. 3. Объявление и открытие курсора.

DECLARE @MyCursorCURSOR

SET @MyCursor=abc

Пример 13. 4. Использование переменной для переприсваивания курсора.

Пример. Разработать курсор для вывода списка фирм и клиентов из Москвы.

DECLARE @firm VARCHAR (50),

@fam VARCHAR (50),

@message VARCHAR (80)

PRINT ' Списокклиентов'

DECLARE klient_cursor CURSOR LOCAL FOR

SELECT Фирма, Фамилия

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

OPEN klient_cursor

FETCH NEXT FROM klient_cursor INTO @firm, @fam

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+ @firm

PRINT @message

-- переход к следующему клиенту--

FETCH NEXT FROM klient_cursor

INTO @firm, @fam

END

CLOSE klient_cursor

DEALLOCATE klient_cursor

Пример 13. 5. Курсор для вывода списка фирм и клиентов из Москвы.

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

DECLARE @id_kl INT,

@firm VARCHAR (50),

@fam VARCHAR (50),

@message VARCHAR (80),

@nam VARCHAR (50),

@d DATETIME,

@p INT,

@s INT

SET @s=0

PRINT ' Список покупок'

DECLARE klient_cursor CURSOR LOCAL FOR

SELECT КодКлиента, Фирма, Фамилия

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

OPEN klient_cursor

FETCH NEXT FROM klient_cursor

INTO @id_kl, @firm, @fam

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+ @firm

PRINT @message

SELECT @message='Наименование товара Дата

покупки Стоимость'

PRINT @message

DECLARE tovar_cursor CURSOR FOR

SELECT Товар. Название, Сделка. Дата,

Товар. Цена*Сделка. Количество AS

Стоимость

FROM Товар INNER JOIN Сделка ON Товар.

КодТовара=Сделка. КодТовара

WHERE Сделка. КодКлиента=@id_kl

OPEN tovar_cursor

FETCH NEXT FROM tovar_cursor

INTO @nam, @d, @p

IF @@FETCH_STATUS<>0

PRINT ' Нет покупок'

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message=' '+@nam+' '+

CAST (@d AS CHAR (12)) +' '+

CAST (@p AS CHAR (6))

PRINT @message

SET @s=@s+@p

FETCH NEXT FROM tovar_cursor

INTO @nam, @d, @p

END

CLOSE tovar_cursor

DEALLOCATE tovar_cursor

SELECT @message='Общаястоимость '+

CAST (@s AS CHAR (6))

PRINT @message

-- переход к следующему клиенту--

FETCH NEXT FROM klient_cursor

INTO @id_kl, @firm, @fam

END

CLOSE klient_cursor

DEALLOCATE klient_cursor

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

DECLARE @firm VARCHAR (50),

@fam VARCHAR (50),

@tel VARCHAR (8),

@message VARCHAR (80)

PRINT ' Списокклиентов'

DECLARE klient_cursor CURSOR GLOBAL SCROLL

KEYSET FOR

SELECT Фирма, Фамилия, Телефон

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

FOR UPDATE

OPEN klient_cursor

FETCH NEXT FROM klient_cursor

INTO @firm, @fam, @tel

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+@firm ' Телефон '+ @tel

PRINT @message

-- если номер телефона начинается на 1,

-- удалить клиента с таким номером

IF @tel LIKE `1% '

DELETE Клиент

WHERE CURRENT OF klient_cursor

ELSE

-- переходкследующемуклиенту

FETCH NEXT FROM klient_cursor

INTO @firm, @fam, @tel

END

FETCH ABSOLUTE 1 FROM klient_cursor

INTO @firm, @fam, @tel

-- в первой записи заменить первую цифру в

-- номере телефона на 4

UPDATE Клиент SET Телефон='4' +

RIGHT (@tel, LEN (@tel) -1))

WHERE CURRENT OF klient_cursor

SELECT @message='Клиент '+@fam+' Фирма '+

@firm ' Телефон '+ @tel

PRINT @message

CLOSE klient_cursor

DEALLOCATE klient_cursor

Пример. Использование курсора как выходного параметра процедуры. Процедура возвращает набор данных - списоктоваров.

CREATEPROCmy_proc

@curCURSORVARYINGOUTPUT

AS

SET @cur=CURSOR FORWARD_ONLY STATIC FOR

SELECT Название FROM Товар

OPEN @cur

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

DECLARE @my_cur CURSOR

DECLARE @n VARCHAR (20)

EXEC my_proc @cur=@my_cur OUTPUT

FETCH NEXT FROM @my_cur INTO @n

SELECT @n

WHILE (@@FETCH_STATUS=0)

BEGIN

FETCH NEXT FROM @my_cur INTO @n

SELECT @n

END

CLOSE @my_cur

DEALLOCATE @my_cur

6. Позапросы

Часто невозможно решить поставленную задачу путем одного запроса. Это особенно актуально, когда при использовании условия поиска в предложении WHERE значение, с которым надо сравнивать, заранее не определено и должно быть вычислено в момент выполнения оператора SELECT. В таком случае приходят на помощь законченные операторы SELECT, внедренные в тело другого оператора SELECT. Внутренний подзапрос представляет собой также оператор SELECT, а кодирование его предложений подчиняется тем же правилам, что и основного оператора SELECT. Внешний оператор SELECT использует результат выполнения внутреннего оператора для определения содержания окончательного результата всей операции. Внутренние запросы могут быть помещены непосредственно после оператора сравнения (=, <, >, <=, >=, <>) в предложения WHERE и HAVING внешнего оператора SELECT - они получают название подзапросов или вложенных запросов. Кроме того, внутренние операторы SELECT могут применяться в операторах INSERT, UPDATE и DELETE.

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

фраза ORDER BY не используется, хотя и может присутствовать во внешнем подзапросе;

список в предложении SELECT состоит из имен отдельных столбцов или составленных из них выражений - за исключением случая, когда в подзапросе присутствует ключевое слово EXISTS;

по умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в предложении FROM. Однако допускается ссылка и на столбцы таблицы, указанной во фразе FROM внешнего запроса, для чего применяются квалифицированные имена столбцов (т. е. с указанием таблицы) ;

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

Существует два типа подзапросов:

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

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

Использование подзапросов, возвращающих единичное значение

Пример. Определить дату продажи максимальной партии товара.

SELECT Дата, Количество

FROM Сделка

WHERE Количество= (SELECT Max (Количество) FROM Сделка)

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

Пример. Определить даты сделок, превысивших по количеству товара среднее значение и указать для этих сделок превышение над средним уровнем.

SELECT Дата, Количество,

Количество- (SELECT Avg (Количество)

FROM Сделка) AS Превышение

FROM Сделка

WHERE Количество>

(SELECT Avg (Количество)

FROM Сделка)

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

Пример. Определить клиентов, совершивших сделки с максимальным количеством товара.

SELECT Клиент. Фамилия

FROM Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента

WHERE Сделка. Количество=

(SELECT Max (Сделка. Количество)

FROM Сделка)

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

Пример. Определить клиентов, в сделках которых количество товара отличается от максимального не более чем на 10%.

SELECT Клиент. Фамилия,

Сделка. Количество

FROM Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=

Сделка. КодКлиента

WHERE Сделка. Количество>=0. 9*

(SELECT Max (Сделка. Количество)

FROM Сделка)

Покажу, как применяются подзапросы в предложении HAVING.

Пример. Определить даты, когда среднее количество проданного за день товара оказалось больше 20 единиц.

SELECT Сделка. Дата, Avg (Сделка. Количество) AS

Среднее_за_день

FROM Сделка

GROUP BY Сделка. Дата

HAVING Avg (Сделка. Количество) >20

За каждый день определяется среднее количество товара, которое сравнивается с числом 20. Добавим в запрос подзапрос.

Пример. Определить даты, когда среднее количество проданного за день товара оказалось больше среднего показателя по всем сделкам вообще.

SELECT Сделка. Дата,

Avg (Сделка. Количество)

AS Среднее_за_день

FROM Сделка

GROUP BY Сделка. Дата

HAVING Avg (Сделка. Количество) >

(SELECT Avg (Сделка. Количество)

FROM Сделка)

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

Использование подзапросов, возвращающих множество значений

Во многих случаях значение, подлежащее сравнению в предложениях WHERE или HAVING, представляет собой не одно, а несколько значений. Вложенные подзапросы генерируют непоименованное промежуточное отношение, временную таблицу. Оно может использоваться только в том месте, где появляется в подзапросе. К такому отношению невозможно обратиться по имени из какого-либо другого места запроса. Применяемые к подзапросу операции основаны на тех операциях, которые, в свою очередь, применяются к множеству, а именно:

{ WHERE | HAVING } выражение [ NOT ] IN (подзапрос) ;

{ WHERE | HAVING } выражение оператор_сравнения { ALL | SOME | ANY } (подзапрос) ;

{WHERE | HAVING } [ NOT ] EXISTS (подзапрос) ;

Использование операций IN и NOT IN

Оператор IN используется для сравнения некоторого значения со списком значений, при этом проверяется, входит ли значение в предоставленный список или сравниваемое значение не является элементом представленного списка.

Пример. Определить список товаров, которые имеются на складе.

SELECT Название

FROM Товар

WHERE КодТовара In

(SELECT КодТовара FROM Склад)

Пример. Определить список отсутствующих на складе товаров.

SELECT Название

FROM Товар

WHERE КодТовара Not In (SELECT КодТовара

FROM Склад)

Пример. Определить товары, которые покупают клиенты из Москвы.

SELECT DISTINCT Товар. Название,

Клиент. ГородКлиента

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента='Москва'

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

Введение в запрос фразы «только» требует использования операции NOT IN.

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

SELECT DISTINCT Товар. Название,

Клиент. ГородКлиента

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Товар. Название NOT IN

(SELECT Товар. Название

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента<>'Москва')

Пример. Какие товары ни разу не купили московские клиенты?

SELECT DISTINCT Товар. Название,

Клиент. ГородКлиента

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Товар. Название NOTIN

(SELECT Товар. Название

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента='Москва')

Во вложенном запросе определяется список товаров, приобретаемых клиентами из Москвы. Во внешнем запросе выбираются только те товары, которые не входят в этот список.

Пример. Определить фирмы, покупающие товары местного производства.

SELECT DISTINCT Клиент. Фирма, Клиент. ГородКлиента,

Товар. ГородТовара

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента=Товар. ГородТовара

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

Введем в запрос фразу «только» - сразу потребуется привлечение операции NOT IN.

Пример. Определить фирмы, которые покупают только товары, произведенные в своем городе, и никакие другие.

SELECT DISTINCT Клиент. Фирма,

Клиент. ГородКлиента,

Товар. ГородТовара

FROM Товар INNERJOIN

(Клиент INNERJOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента NOT IN

(SELECT DISTINCT Клиент. ГородКлиента

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

WHERE Клиент. ГородКлиента<>

Товар. ГородТовара)

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

Использование ключевых слов ANY и ALL

Ключевые слова ANY и ALL могут использоваться с подзапросами, возвращающими один столбец чисел.

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

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

Если в результате выполнения подзапроса получено пустое значение, то для ключевого слова ALL условие сравнения будет считаться выполненным, а для ключевого слова ANY - невыполненным. Ключевое слово SOME является синонимом слова ANY.

Пример. Определить клиентов, совершивших сделки с максимальным количеством товара.

SELECT Клиент. Фамилия, Сделка. Количество

FROM Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента

WHERE Сделка. Количество>=ALL (SELECT Количество

FROM Сделка)

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

Пример. Найти фирму, купившую товаров на сумму, превышающую 10000 руб.

SELECT Клиент. Фирма,

Sum (Товар. Цена*Сделка. Количество)

AS Общ_стоимость

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

GROUP BY Клиент. Фирма

HAVING Sum (Товар. Цена*Сделка. Количество) >10000

Добавим в запрос подзапрос.

Пример. Найти фирму, которая приобрела товаров на самую большую сумму.

SELECT Клиент. Фирма,

Sum (Товар. Цена*Сделка. Количество)

AS Общ_стоимость

FROM Товар INNER JOIN

(Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента)

ON Товар. КодТовара=Сделка. КодТовара

GROUP BY Клиент. Фирма

HAVING Sum (Товар. Цена*Сделка. Количество) >=

ALL (SELECT Sum (Товар. Цена*Сделка. Количество)

FROM Товар INNER JOIN Сделка

ON Товар. КодТовара=Сделка. КодТовара

GROUP BY Сделка. КодКлиента)

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

Пример. Найти фирмы, в сделках которых количество товара превышает такой же показатель хотя бы в одной сделке клиентов из Самары.

SELECT Клиент. Фирма, Сделка. Количество

FROM Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента

WHERE Сделка. Количество>

ANY (SELECT Сделка. Количество

FROM Клиент INNER JOIN Сделка

ON Клиент. КодКлиента=Сделка. КодКлиента

WHERE Клиент. ГородКлиента='Самара')

Использование операций EXISTS и NOT EXISTS

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

Пример. Определить список имеющихся на складе товаров.

SELECT Название

FROM Товар

WHERE EXISTS (SELECT КодТовара

FROM Склад

WHEREТовар. КодТовара=Склад. КодТовара)

Пример. Определить список отсутствующих на складе товаров.

SELECT Название

FROM Товар

WHERE NOT EXISTS (SELECT КодТовара

FROM Склад

WHERE Товар. КодТовара=Склад. КодТовара)

7. Интеграция СУБД в Web и обзор серверных СУБД

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

для получения информации необходим физический доступ к соответствующей СУБД;

пользователь должен быть в курсе модели данных, знать схему базы данных;

требуется умение пользоваться языком запросов к БД.

Каковы возможности взаимодействия Web-приложений и СУБД? С одной стороны, технологии Internet/Intranet имеют удобный язык разработки распределенных гипертекстовых документов, включая простые, удобные, развитые и унифицированные интерфейсы для доступа к информации. С другой стороны - наличие большого количества ценных баз данных, управляемых разнородными СУБД, а также стремление увеличить доступность данных для корпоративных пользователей. Возникает естественное желание скрестить эти две технологии и обеспечить доступ к базам данных в интерфейсе Web. Еще два года назад существовали только идеи такого скрещивания и не очень тщательно разработанные подходы к реализации. На сегодня имеется два класса механизмов такого взаимодействия: 1) обеспечивающие доступ к БД (по запросу клиента) на стороне Web-сервера; 2) работающие непосредственно на стороне клиента.

Доступ к базе данных на стороне сервера

Механизм доступа к БД на стороне сервера реализуется за счет наличия стандартизованных средств:

поддержки диалоговых форм на уровне гипертекстового документа (язык HTML) ;

возможности запуска серверных программ, взаимодействие которых происходит через стандартный интерфейс CGI или прикладные интерфейсы Web-сервера.

При реализации на основе CGI общая схема реализации доступа к базе данных на стороне Web-сервера выглядит следующим образом:

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

пользователь запрашивает эту страницу, помимо незаполненных форм страница может содержать общую информацию о базе данных и о назначении предлагаемых форм;

если пользователя интересует информация из БД, которую можно получить на основе предложенных форм, то он заполняет одну из форм и отправляет заполненную форму на сервер;

получив заполненную форму, сервер запускает соответствующую внешнюю программу, передавая ей параметры и получая результаты на основе протокола CGI;

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

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

API - это, фактически, дешевый, но небезопасный способ выполнить в адресном пространстве сервера WWW программу, которая соответствует спецификациям на языке HTML. Такая программа должна быть заранее подготовлена и включена в библиотеку, из которой сервер может производить динамическую загрузку (DLL-модули в Windows или разделяемая библиотека sharedlibrary в Unix).

Доступ к базе данных на стороне клиента

Видимо, наиболее мощные средства обеспечения доступа к базам данных на стороне Web-клиента обеспечивает язык Java. Java - это объектно-ориентированный язык программирования, являющийся, по сути дела, «безопасным» подмножеством языка С++. В частности, Java не содержит средств адресной арифметики, не поддерживает механизм множественного наследования и т. д. Поэтому утверждается, что корректность Java-программы можно проверить до ее реального выполнения (это абсолютно недоказанное утверждение). Различают:

язык Java как таковой, для которого существуют компиляторы в так называемый «мобильный код» (машинно-независимый код, который может интерпретироваться или из которого могут генерироваться машинные коды на разных платформах) ;

язык JavaScript, который обычно используется для расширения возможностей языка HTML за счет добавления процедурной составляющей;

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

Для обеспечения доступа к базам данных на стороне Web-клиента наиболее существенно наличие языка Java. Технология разработки HTML-документа позволяет написать произвольное количество дополнительных Java-программ, откомпилировать их в мобильные коды и поставить ссылки на соответствующие коды в теле HTML-документа. Такие дополнительные Java-программы называются апплетами (Java-applets). Получив доступ к документу, содержащему ссылки на апплеты, клиентская программа просмотра запрашивает у Web-сервера все мобильные коды. Коды могут начать выполняться сразу после размещения в компьютере клиента или быть активизированы с помощью специальных команд.

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

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

В заключение сравним достоинства и недостатки двух рассмотренных подходов. Использование CGI-скриптов на стороне Web-сервера позволяет иметь на стороне клиента только сравнительно простые программы просмотра. Вся хитроумная логика работы с базами данных (возможно, с обработкой полученных данных) переходит на сторону Web-сервера. Это легкий способ построения трехзвенной архитектуры приложения. (В последнее время разгрузку клиента от логики приложения называют решением проблемы «толстого» клиента.) Отрицательным моментом является то, что при необходимости подключения нового CGI-скрипта, вообще говоря, требуется (относительная) модификация кода сервера.

Использование Java-апплетов, вообще говоря, обеспечивает более гибкое решение. Апплет - это часть HTML-документа. Для включения нового апплета нужно всего-навсего перекомпоновать документ. Web-cервер трогать не нужно. С другой стороны, клиент должен быть толще. Что бы там ни говорили, клиент должен быть достаточно «толстым», чтобы в приемлемое время справиться с интерпретацией всех апплетов. Но, конечно же, сервер по-прежнему должен быть «толще» клиента.

На самом деле и при применении первого подхода, и при использовании второго остается нерешенной одна организационно-производственная проблема: кто должен проектировать, писать, отлаживать и сопровождать процедурный код? Web-мастера, производящие HTML-документы, обычно считают себя, скорее, дизайнерами нежели программистами. А здесь требуется чисто программистская работа.

Использование интерфейса CGI для связи с СУБД

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

Программы, поддерживающие спецификацию CGI, можно писать на различных языках программирования, в том числе С, С++ и PERL. Они могут обращаться к реляционным БД, считывать и выводить данные, собирать информацию с других компьютеров и исполнять многие другие функции. Множество CGI-программ самого различного назначения бесплатно распространяются по Internet. По мнению аналитиков, принципиальные ограничения на функциональные возможности CGI-совместимых продуктов отсутствуют. Эти программы могут взаимодействовать практически с любой реляционной базой данных и Web-сервером. Однако CGI-продукты имеют один существенный недостаток: не поддерживают непрерывную связь между БД и Web-сервером. Они подключаются к базе данных, исполняют запрос пользователя Web-страницы, а затем отключаются от БД. При следующем запросе весь процесс подключения к БД повторяется.

На сленге Web-мастеров любая внешняя программа, запускаемая Web-сервером в соответствии со спецификациями CGI, называется CGI-скриптом. CGI-скрипт может быть написан на языке программирования (С, С++, Паскаль и т. д.) или на командном языке (языки семейства shell, perl и т. д.). CGI-скрипт, выполняющий роль посредника между Web-сервером и другими видами серверов (например, сервером баз данных), называется шлюзом (видимо, более правильно было бы использовать термин CGI-шлюз). Наличие CGI-скриптов на стороне Web-сервера позволяет, в частности, перенести часть логики приложения из клиента на сервер. CGI-шлюзы представляют собой средство для организации трехзвенной (в общем случае, многозвенной) архитектуры клиент-сервер.

В спецификациях CGI предусмотрены четыре способа взаимодействия Web-сервера и CGI-скрипта (по крайней мере, в среде ОС Unix). Первый способ состоит в использовании создаваемых сервером переменных окружения, через которые передается как общая информация, независящая от функциональных особенностей CGI-скрипта (например, имя и версия Web-сервера), так и специфические данные, определяющие поведение CGI-скрипта (скажем набор значений, введенных в форму на стороне клиента). Второй способ заключается в формировании параметров argc и argv, которые передаются функции mainCGI-скрипта (как если бы CGI-скрипт вызывался командной строкой в интерактивном режиме). Этот способ применяется для реализации ограниченного класса запросов ISINDEX. Наконец, входные параметры могут передаваться CGI-скрипту через файл стандартного ввода, а CGI-скрипт может передавать Web-серверу результирующие данные через файл стандартного вывода.

Достоинства и недостатки спецификации CGI

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

Однако то, что CGI-программы после обработки каждого запроса разрывают связь с базой данных, сильно осложняет деятельность хакеров, так как при отсутствии постоянного подключения к корпоративной системе проникнуть в нее гораздо сложнее. Существенным достоинством этих программ является и то, что связь с Web-сервером устанавливается только на короткий промежуток времени: в результате он не перегружается и может выполнять другие задания.

На сегодняшний день имеется множество продуктов, которые дают возможность пользователям создавать собственные программы в стандарте CGI (на языках С, С++ или PERL). Они по-разному решают проблемы CGI и реализуют достоинства этой спецификации. Вот несколько примеров.

Bluestone предлагает среду для разработки CGI-приложений Sapphire/Web. Проблема преждевременного отключения от базы данных решена в этом продукте за счет автоматической поддержки связи с БД в течение заданного времени. Если пользователь обращается к Web-узлу и передает запрос БД, которая используется большинством приложений, не требующих регистрации в базе данных, то шлюзовое ПО автоматически использует уже установленную связь.

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

WebMate выпускает интегрированную среду для разработки приложений WebMate/Foundation. Этот продукт позволяет не только создавать программные коды в стандарте CGI (как и все другие аналогичные пакеты), но и дает возможность устанавливать права доступа к файлам баз данных (по чтению или по записи), предохраняя БД от внесения несанкционированных изменений.

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

Intersolv выпускает набор драйверов для стандарта ODBC, который обеспечивает доступ к БД Oracle; программу для подключения к серверу базы данных и шлюз между стандартами JDBC и ODBC. Продукты позволяют программистам создавать Web-страницы на языке Java и использовать их для доступа к БД. Аналогичные средства выпускает компания VisigenicSoftware.

ISAPI и NSAPI

Ведущие поставщики, такие как Netscape, BorlandInternational, Microsoft и Sun, устраняют недостатки, присущие спецификации CGI, используя вместо нее собственные API-интерфейсы. Netscape предлагает NetscapeServerAPI, компания Microsoft разрабатывает технологию ActiveX и интерфейсы InternetServerAPI (ISAPI), которые взаимодействуют с совместимыми OLE-серверами для выполнения распределенных вычислений. Sun занимается созданием интерфейса JDBC, который позволит устанавливать непосредственную связь между Web-страницами, написанными на языке Java, и базой данных. Некоторые API-интерфейсы из набора JDBC уже предлагаются пользователям, но большая их часть находится в стадии разработки.

Microsoft выпустила Web-сервер InternetInformationServer (IIS), поддерживающий ISAPI, который входит в состав WindowsNT и тесно интегрирован с СУБД SQLServer. Запрос передается серверу IIS, который использует ISAPI для извлечения данных из БД и передачи их пользователю в формате HTML. Представители Microsoft считают, что такое решение намного проще в использовании, чем CGI, и работает на порядок быстрее.

Oracle предлагает ПО WebServer, который также использует API-интерфейсы Oracle. С его помощью можно разрабатывать приложения на языках PL/SQL, C и C++, которые исполняют запросы к базе данных, написанные на языке PL/SQL. В дальнейшем компания намерена дополнить WebServer поддержкой спецификаций JDBC.

Кроме риска, связанного с защитой данных, CGI присущи ограниченные возможности масштабирования и невысокое быстродействие. Каждая реализация CGI-сценария запускается в своем собственном адресном пространстве, а не в адресном пространстве Web-сервера. Для 32-разрядных систем Windows это означает, что каждое обращение к CGI-сценарию требует запуска приложения WinExec, загрузки с диска новой копии исполняемой программы и, возможно, новой копии сценария, а также создания нового адресного пространства с новым процессом и новой структурой указателей. Часто сам сценарий делает очень мало, поэтому непроизводительные затраты на создание процесса составляют большую часть времени выполнения сценария CGI.

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

Два ведущих производителя Web-серверов, Netscape и Microsoft, опубликовали свои собственные патентованные схемы расширения Web-сервера, основанные на DLL. Интерфейс NSAPI компании Netscape работает на платформе Unix, которая поддерживает совместно используемые объекты. Интерфейс ISAPI корпорации Microsoft не будет работать в Unix, поскольку сервер IIS этой же корпорации запускается только на системе WindowsNTServer.

DLL-библиотеки ISAPI имеют две необходимые точки входа - GetExtensionVersion и HttpExtensionProc. Первый вызов позволяет серверу узнавать номера версий расширений DLL и строку описания при инициализации, а второй эквивалентен процедуре main расширения. Информация в HttpExtensionProc передается при помощи единственного параметра и указателя управляющего блока расширения. Структура этого блока несет главную информацию, которая должна быть направлена в переменные среды CGI-программы.

ISAPI может следующее:

запросить дополнительную информацию по имени при помощи вызова GetServerVariable;

считать информацию из тела HTTP- запроса Web-клиента при помощи вызова ReadClient;

послать информацию HTTP-клиенту при помощи вызова WriteClient;

возвратить серверу информацию о расположении, переадресации и состоянии процесса при помощи вызова ServerSupportFunction.

Дополнительную информацию по ISAPI вы можете найти в IISSDK корпорации Microsoft по адресу: http: //www. microsoft. com/intdev/.

Дать резюме для NSAPI нелегко. Будучи аналогичным ISAPI, интерфейс NSAPI все же является более сложным и теснее привязан к конфигурации сервера, хотя и более гибок. Конфигурация каждой функции NSAPI должна быть задана в объектной базе данных конфигурации Netsite. Блоки параметров NSAPI базируются на парах name-value, что во многом аналогично переменным Web-форм. Дополнительную информацию по NSAPI можно найти по адресу: http: //www. netscape. com/newsref/std/server_api. html.

Когда каждый компьютер в мире наконец получит свой Web-сервер, возникнет интересный потребительский рынок для расширений серверов. Любопытно, найдутся ли желающие провести опрос, чтобы получить возможность предсказать, когда же это произойдет?

Доступ к БД через интерфейс JDBC

Апплеты Java не позволяют напрямую связываться с базами данных. Для разработчиков, использующих язык Java в среде клиент/сервер, разработан прикладной программный интерфейс APIJDBC, обеспечивающий доступ к базам данных из языка Java.

Спецификация JDBC представляет собой прикладной программный интерфейс и разработана в подразделении JavaSoft корпорации Sun. Стандарт пока еще не утвержден. JDBC базируется на интерфейсе уровня вызовов X/OpenSQLCLI - основе ODBC. Прикладной программный интерфейс JDBC реализуется поверх других SQL-API, включая ODBC. Это означает, что все базы данных, допускающие работу с ODBC, будут взаимодействовать с JDBC без изменений.

JDBC использует двухуровневую архитектуру для связи апплетов и баз данных. Этот процесс прост - Internet- или Intranet-пользователи, использующие броузеры, подключаются к локальному или удаленному Web-серверу и загружают HTML-документ с включенным апплетом. Апплет выполняется на клиентской ЭВМ в среде броузера и устанавливает обратную связь с сервером базы данных. Механизм связи с базами данных является стандартным классом Java, поэтому средства безопасности, обеспечиваемые языком Java, поддерживают безопасную связь с базами данных.

Архитектура JDBC состоит из двух уровней: JDBCAPI, который обеспечивает связь между приложением и менеджером JDBC, и драйвер JDBCAPI, который поддерживает связь между JDBC менеджером и драйвером. Разработчики имеют возможность взаимодействовать напрямую с ODBC посредством моста JDBC-ODBC. Согласно JavaSoft, производительность при использовании моста не ухудшится.

При необходимости доступа к базе данных, апплет получает объект java. sql. Connection непосредственно из слоя управления JDBC и менеджера драйвера java. sql. DriverManager. Менеджер драйвера использует строку URL в качестве аргумента и уровень управления JDBC обнаруживает и загружает соответствующий драйвер для целевой базы данных, с которой пытается соединиться апплет. Менеджер драйвера выполняет это, опрашивая каждый драйвер, для выявления драйвера, который может соединиться с указанным адресом URL. Драйвер определяет, требует ли данный URL субпротокол, поддерживаемый драйвером. После этого драйвер подключается к удаленной базе данных, возвращая правильный объект java. sql. Connection, являющийся методом доступа апплета к сервисам базы данных.

JDBC не может выполнить свою работу без драйвера и уровень управления JDBC должен знать о размещении всех доступных драйверов баз данных. Существуют два способа, которыми JDBC может это выполнить. Первый способ - во время инициализации класс java. sql. DriverManager ищет свойства sql. drivers в системных свойствах. Если он существует, DriverManager класс загрузит его. Второй способ заключается в явном вызове определенного драйвера, тем самым отпадает необходимость в поиске.

Обзор средств Microsoft

MicrosoftSQLServerWebAssistant

В состав MicrosoftSQLServer 6. 5 входит SQLWebAssistant - довольно простая в использовании утилита, не требующая знания HTML и серьезной практики работы с SQL. WebAssistant имеет интерфейс мастера (wizard), т. е. состоит из ряда последовательных форм с вопросами, отвечая на которые администратор может сэкономить время по выполнению рутинного HTML-кодирования и получить готовую (в HTML-кодах) страницу, содержащую результаты опубликования произвольного запроса к базе. Полученная страница не является активной в строгом смысле этого слова, так как публикуется при помощи push-метода, т. е. обновление происходит по инициативе сервера, и не допускает обновления со стороны клиента. Однако сервер может производить обновление (перегенерацию) страницы на триггерной основе или на основе расписаний задач под управлением SQLExecutive. Мастер работает только с базами данных MSSQLServer и использует три хранимых процедуры sp_makewebtask, sp_runwebtask и sp_dropwebtask. При необходимости они могут использоваться самостоятельно в кодах T-SQL.

Шлюз dbWeb для доступа к БД

MicrosoftdbWeb представляет собой шлюз между 32-битными ODBC-ресурсами, в качестве которых могут выступать, например, MicrosoftSQLServer, MicrosoftAccess, MicrosoftVisualFoxPro, Oracle и т. д., и Web-сервером MSIIS. Пакет dbWeb предусматривает создание схемы, содержащей описание данных и связанных с ними Web-страниц. Он поддерживает исполнение запросов в реальном режиме времени на основе «pull»-модели публикации, позволяя тем самым создавать активные Web-страницы.

MicrosoftdbWeb структурно состоит из двух основных компонент: dbWebService и dbWebAdministrator. Компонент dbWebService является типичным ISAPI-приложением, которое обрабатывает пользовательские запросы, направляемые посетителем страницы через броузер, и управляет соединениями между броузером, ODBC-ресурсом и IIS. К функциям dbWebAdministrator относится создание HTML-страниц, содержащих результаты выполнения запросов на основе уже упоминавшихся схем, с помощью которых осуществляется управление публикуемыми данными. Схемы определяют сам запрос и структуру страниц. При этом не требуется знания HTML или ISAPI, так как в состав dbWebAdministrator входит интерактивный мастер-построитель схем (SchemaWizard), который в традиционной для любой программы-мастера манере позволяет задать поля поиска по методу Query-by-Example (QBE), выбрать поля для отображения в таблице страницы результатов и определить переходы из списка записей в отдельные страницы, содержащие развернутую информацию по текущей записи. Настройкой соответствующих свойств можно разрешать или запрещать операции вставки, удаления и редактирования. Для проверки прав пользователя используется система безопасности той СУБД, к которой происходит доступ. dbWeb имеет в своем составе широкий спектр шаблонов страниц, которые при необходимости могут быть легко откорректированы и настроены разработчиком для более полного соответствия его задачам. Таким образом, dbWeb не является конечным пользовательским приложением. Скорее его можно охарактеризовать как достаточно легкий в использовании инструментарий разработки, который, как всякий мастер, не поддерживает языка программирования и оттого несколько проигрывает в функциональности SQLWebAssistant, несмотря на возможность инициируемого посетителем обновления информации в базе. Тем не менее, эта программа успешно справляется с автоматизацией большинства рутинных операций по организации соединений и публикации данных из БД и покрывает, по разным оценкам, порядка 40-60% потребностей бизнеса среднестатистической фирмы при организации доступа к своим источникам данных через Internet. dbWeb является свободно распространяемым приложением и может быть установлен с MicrosoftTechnet, WindowsNTResourceKit или непосредственно с http: //www. microsoft. com.

Серверные расширения IDC и ASP

Microsoft предоставляет расширение для Web-сервера -InternetDatabaseConnector, программу на базе ISAPI, обеспечивающую доступ к MicrosoftAccess, MicrosoftSQLServer, Oracle, Sybase, Informix и другим ODBC-совместимым базам данных.

IDC является примером достаточно давно и успешно используемого ISAPI-приложения. Он входит в состав MSIIS. С помощью вызовов функций ODBCAPIIDC обеспечивает прямую связь между полями HTML-формы и соответствующим ODBC-достижимым источником данных, например, базой данных MSSQLServer, без необходимости написания замысловатых CGI-скриптов.

Когда речь заходит о компонентах ActiveX, как правило, неявно подразумевается клиентская часть приложения. MicrosoftActiveServerPages (ASP) - активные серверные страницы - представляют собой инструмент для эффективной разработки серверных Web-приложений, интегрирующих в своем составе HTML-код, VBScript и компоненты ActiveX. Это означает, что в уже существующие наработки легко могут быть встроены фрагменты кода на VBScript или JavaScript, а также вызовы соответствующих объектов ActiveX.

Динамическая публикация отчетов из БД

Помимо статической публикации отчетов из БД, в Intranet находит применение динамическая публикация отчетов из БД на основе запроса пользователя. Такой метод можно реализовать через CGI или с помощью специальных средств на основе API для Web-серверов. Ряд фирм предлагает такие средства, часто в них используются HTML-шаблоны для подстановки значений полей из записей БД. Примером средства динамической публикации может служить компонент InternetDatabaseConnector (IDC) для сервера MicrosoftIIS. IDC позволяет по SQL-запросу обращаться через интерфейс ODBC к настольным и реляционным СУБД. Рассмотрим подробнее процесс динамической публикации, обеспечиваемый IDC. На InternetInformationServer полный цикл работы IDC состоит из шести шагов, которые показаны ниже на схеме.

Шаг 1. InternetInformationServer принимаетадрес URL.

Адрес URL посылается Web-броузеромна InternetInformationServer.

Шаг 2. IIS загружает библиотеку Httpodbc. dll и передает ей адрес URL.

Библиотека Httpodbc. dll загружается и извлекает из полученного от IISURL-адреса имя IDC-файла (и другие элементы).

Шаг 3. Библиотека Httpodbc. dll читает IDC-файл.

IDC-файл содержит элементы в виде

field: value

Например, источник данных ODBC - Datasource: WebSQL, HTML-шаблон, в который будут размещены результаты SQL-запроса, - Template: sample. htx, имя пользователя, которое определяет, если это необходимо, имя для доступа к источнику данных ODBC - Username: sa, SQL-предложения, которые будут выполнены -

SQLStatement:

SELECTau_lname, ytd_sales

FROMpubs. dbo. titleview

WHEREytd_sales>5000

Шаг 4. Библиотека Httpodbc. dll соединяется с источником данных ODBC и выполняет SQL-предложения, находящиеся внутри IDC-файла.

Соединение с источником данных ODBC осуществляется библиотекой Httpodbc. dll, которая загружает ODBC-драйвер (в примере, указанном выше, - ODBC-драйвер для SQLServer) и соединяется с сервером, указанном в описании источника данных. В продолжении примера, при установлении связи, SQL-предложения из IDC-файла пересылаются ODBC-драйверу SQLServer, который перенаправляет их в SQLServer.

Шаг 5. Библиотека Httpodbc. dll выбирает данные из БД и отправляет их в HTX-файл.

После того, как SQL-предложения будут выполнены, Httpodbc. dll прочитывает HTX-файл, имя которого определено в IDC-файле. HTX-файл содержит специальные HTML-теги, которые Httpodbc. dll использует для определения, где и как разместить результирующие данные SQL-запроса.

Шаг 6. Библиотека Httpodbc. dll отправляет заполненный результирующий HTML-документ InternetInformationServer, который возвращает его клиенту.

После того, как все выбранные данные будут записаны в HTX-файл, заполненный HTML-документ отправляется клиенту. Результирующая Web-страница отображается броузером.

Кроме построения приложений для генерации отчетов и для поиска по образцу, существует возможность создания на базе IDC диалоговых приложений регистрации данных. Более сложные приложения обработки транзакций IDC не поддерживает из-за невозможности обеспечить целостность сложных транзакций при отсутствии понятия сеанса для протокола HTTP. Новый продукт ActiveServerPage (ASP) позволяет строить более сложные серверные приложения с использованием VBScript и обеспечивает поддержку транзакций.

Динамическая публикация БД с помощью IDC

Основные функции, особенности и форматы данных семейства IBM DB2 Information Integrator

№ п/п

Стратегия интеграции

Основные функции

Поддерживаемые форматы данных

1.

Объединение данных

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

Использование языка SQL и процедуроптимизации запросов.

Единый интерфейс для поиска и преобразования данных.

Реляционныеисточники: DB2, Informix Dynamic Server, Informix Extended Parallel Server, Microsoft SQL Server, ORACLE, Sysbase SQL Server, Sysbase Adaptive Server Enterprise, Teradata; источники, доступныеспомощьюODBC. Нереляционные источники: Excel, Documentum Enterprise Content; источники данных, доступные с помощью IBM Lotus Extended Search, IBM DB2 Information Integrator for Content

2.

Репликация данных

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

Поддержка идентичных копий.

Копирование подмножества данных из одной системы во многие (распределение данных).

Копирование подмножеств данных из многих источников в один (консолидация данных).

Автоматизация перемещения данных (по графику, в зависимости от событий и т. д.).

DB2, Informix Dynamic Server, Microsoft SQL Server, ORACLE, Sysbase SQL Server, Sysbase Adaptive Server Enterprise, Informix Extended Parallel Server, Teradata; источники, доступныеспомощьюODBC

3.

Конвертация данных

Создание и публикация XML-документов с использованием разнообразных источников данных.

Использование языка SQL с процедурами оптимизации доступа к данным.

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

...

Подобные документы

  • Архитектура "клиент-сервер". Параллельная обработка данных в многопроцессорных системах. Модернизация устаревших информационных систем. Характерные черты современных серверных СУБД. Наиболее популярные серверные СУБД. Распределенные запросы и транзакции.

    курсовая работа [309,2 K], добавлен 11.11.2011

  • Основные вехи на пути развития систем программирования. Microsoft Access - первая СУБД для персональных компьютеров, созданная для работы в среде Windows. Перенос файл-серверных приложений в среду клиент-сервер. Использование ActiveX Data Objects.

    презентация [662,2 K], добавлен 11.04.2013

  • Понятие и сущность базы данных, их классификация и характеристика. Системы управления базами данных. СУБД структуры "сервер-клиент", его суть. Microsoft Access - функционально полная реляционная СУБД. Предназначение СУБД Access, и описание ее работы.

    реферат [44,3 K], добавлен 27.02.2009

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

    курсовая работа [2,3 M], добавлен 01.11.2011

  • Структура и функции системы управления базами данных (СУБД). Управление хранением данных и доступом к ним. Защита и поддержка целостности данных. Надежность хранения данных во внешней памяти. Классификация СУБД по способу доступа к базе данных.

    презентация [3,7 M], добавлен 05.06.2014

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

    презентация [73,2 K], добавлен 28.05.2019

  • Краткая история развития СУБД ORACLE, основные понятия и определения, архитектура. Принципы работы с СУБД ORACLE. Разработка баз данных, средства и технологии их реализации; возможности процедурного языка PL/SQL. Приемы администрирования СУБД ORACLE.

    презентация [609,2 K], добавлен 14.02.2014

  • Теоретические аспекты СУБД. Основные понятия. Функциональные возможности СУБД. Архитектура систем управления. Разработка базы данных. Крупные массивы данных размещают, как правило, отдельно от исполняемого программы, и организуют в виде базы данных.

    курсовая работа [30,5 K], добавлен 23.02.2006

  • Типы моделей данных: реляционная, иерархическая и сетевая. Описание концептуальной модели реляционной базы данных. Разработка базы данных в СУБД Microsoft Access, ее премущества и недостатки, составные компоненты, описание и обоснование полей таблиц.

    курсовая работа [62,6 K], добавлен 09.03.2009

  • Определение, свойства и характеристики распределенных систем баз данных. Основная задача систем управления ими. Архитектура распределения СУБД. Сравнение технологий файлового сервера и "клиент-сервера". Стратегия распределения данных по узлам сети ЭВМ.

    курсовая работа [601,3 K], добавлен 24.05.2015

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

    реферат [33,2 K], добавлен 08.04.2009

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

    курсовая работа [467,8 K], добавлен 14.12.2012

  • Разработка API взаимодействия клиентских приложений с сервером СУБД через Pipe под Windows. Устройство и характеристики СУБД SQLite. Методы WinAPI для передачи данных. Реализация взаимодействия через PIPE. Результат работы серверного приложения.

    курсовая работа [596,3 K], добавлен 09.05.2014

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

    презентация [618,1 K], добавлен 14.02.2014

  • Классификации баз данных и СУБД. Технология модели "клиент-сервер". Особенности языка структурированных запросов SQL. Структура и назначение операторов определения, манипулирования и управления данными. Разработка реляционной БД, создание SQL запросов.

    курсовая работа [1,4 M], добавлен 17.08.2015

  • Основные этапы проектирования базы данных. Access как система управления базами данных (СУБД), ее предназначение, отличительные возможности. Работа с таблицами, их создание и редактирование. Порядок создания запросов. Способы защиты баз данных.

    лабораторная работа [3,1 M], добавлен 18.08.2009

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

    курсовая работа [60,5 K], добавлен 02.03.2014

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

    реферат [18,1 K], добавлен 06.10.2011

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

    курсовая работа [965,5 K], добавлен 13.01.2013

  • Технологии обработки экономической информации в среде ТП MS Excel. Работа в среде СКМ Maple. Технологии обработки данных в среде СУБД MS Access и анализ языка запросов SQL как средства расширения возможностей СУБД. Разработка отчетов в СУБД Access.

    контрольная работа [1,5 M], добавлен 04.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.