Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 04.06.2009 | Доступ: свободный | Студентов: 16032 / 5003 | Оценка: 4.34 / 4.09 | Длительность: 14:55:00
Лекция 11:

Программное обеспечение работы с современными базами данных

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Аннотация: В лекции рассматриваются общие принципы организации программного обеспечения работы с реляционными базами данных, включающего: - создание и ведение базы данных; - создание пользовательских приложений, включающих разработку пользовательского интерфейса по работе с базой данных.

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

11.1. Основные задачи программного обеспечения баз данных

При работе с реляционными базами данных можно условно выделить две основные задачи:

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

Для решения указанных задач современные СУБД в своем составе могут содержать следующие программные средства: языки процедурного пошагового программирования, средства визуального программирования (графический интерфейс, диспетчер проекта, мастера и построители), средства создания объектно-ориентированных приложений. Кроме этого, при разработке пользовательских программ во многих СУБД допускается использование других языков программирования, а также использование библиотек разного рода. Так, например, при работе с СУБД ACCESS можно использовать язык программирования ACCESS , мастер ACCESS и язык программирования VISUAL BASIC.

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

Таблица 11.1. Возможные варианты использования программного обеспечения в СУБД MS SQL Server
Средства ведения баз данных на сервере MS SQL Средства разработки клиентских приложений
Службы SQL-сервер (MS SQL server и др.)
  • Программное обеспечение клиента SQL-сервер (Transact SQL, SQL Server Query Analyzer и др.)
  • MS Access (ODBC)
  • MS Visual Basic
  • MS Visual Studio
  • MS Visual FoxPro
  • Java (JDBC)
  • Borland Delphi
  • Borland C++Builder и др.
  • Библиотеки функций (API, ODBC и др.)

Полное рассмотрение всего спектра программного обеспечения работы СУБД очень обширно и выходит за рамки данного пособия. Поэтому в данной работе будет рассмотрены только средства создания и ведения базы данных.

11.2. Проблемы создания и ведения реляционных баз данных

При создании базы данных и организации работы с ней возникают три основные проблемы:

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

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

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

СТУДЕНТ (Код студента, Фамилия, Имя, Отчество, Дата поступления).

Теперь мы хотим выполнить некоторый запрос к базе данных, результатом которого должны стать те строки таблицы СТУДЕНТ, для которых дата поступления окажется больше 01.06.2006. Рассмотрим последовательность действий для реализации данного запроса.

  1. Получаем доступ к таблице СТУДЕНТ и устанавливаем указатель текущей строки на первую строку таблицы.
  2. Анализируем поле "Дата поступления " в текущей строке.
  3. Если значение "Дата поступления" > "01.06.2006", распечатываем на экране данные об абитуриенте.
  4. Если таблица не кончилась, перемещаем указатель текущей строки на следующую строку и переходим к шагу 2, иначе заканчиваем работу.

Любой человек, знакомый с программированием, легко представит себе реализацию подобного алгоритма на любом языке программирования высокого уровня. Вот, в частности, пример реализации на Object Pascal:

Table.First;
while (not Table.Eof) do
begin
	if FieldByName("Дата поступления").Value >
	   "01.06.2006"
	then List.Add(FieldByName("Фамилия").AsString);
	Table.Next;
end;

В этом случае разработчик приложения сам организует работу по выборке данных, программируя каждое движение по таблице (осуществляет навигацию по таблице). Такой подход к обработке данных, ориентированный на последовательную работу с отдельными записями, называется навигационным. Здесь на конкретном языке программирования мы описываем процедуру - последовательность действий, необходимых для получения результата. Языки, в которых используется такой подход, называются процедурными. Очевидно, что с возрастанием сложности запроса существенно возрастает сложность процедуры и, соответственно, объем текста программы.

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

Кроме того, должен учитываться механизм взаимодействия в рамках архитектуры "клиент – сервер". Пользовательская программа выполняется на компьютере–клиенте. Запрос к базе данных реализуется компьютером – сервером. Необходим механизм формирования в пользовательской программе клиента запроса к базе данных сервера. В этом случае навигационный подход неприемлем. В связи с этим, для работы с базами данных разработан и используется другой подход, основанный на использовании так называемых языков запросов, которые задают не последовательность необходимых действий, а условия, которым должен удовлетворять результат (при добавлении столбца, выборке записи, добавлении записи и т. п.). Такой подход решает все три вышеперечисленные проблемы.

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

Язык SQL (Structured Query Language – структурированный язык запросов) применяется для общения пользователя с реляционной базой данных и состоит из трех частей [ [ 11.2 ] ]:

  • DDL (Data Definition Language) – язык определения данных. Предназначен для создания базы данных (таблиц, индексов и т.д.) и редактирования ее схемы.
  • DCL (Data Control Language) – язык управления данными. Содержит операторы для разграничения доступа пользователей к объектам базы данных.
  • DML (Data Manipulation Language) – язык обработки данных. Содержит операторы для внесения изменений в содержимое таблиц базы данных.

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

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

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

SELECT Фамилия
FROM  Студент
WHERE Дата поступления > "01.06.2006"

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

  1. Появился новый уровень абстракции между пользователем и СУБД. Этот уровень находится ближе к пользователю, чем уровень программирования на языке высокого уровня, что снижает требования к квалификации пользователей.
  2. Многие типовые задачи, возникающие при работе с базами данных, и ранее решаемые каждым программистом по-своему (зачастую дублируя действия другого программиста) решены реализацией языка SQL. Таким образом, отпала необходимость самостоятельного решения многих проблем, решенных в СУБД соответствующим образом. Язык SQL предоставляет средства для доступа к этим типовым возможностям СУБД.
< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Александра Каева
Александра Каева
Карина Максутова
Карина Максутова