Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распред-ые СОИ.doc
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
591.87 Кб
Скачать

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 – структурированный язык запросов) применяется для общения пользователя с реляционной базой данных и состоит из трех частей [[23]]:

  • 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 предоставляет средства для доступа к этим типовым возможностям СУБД.