Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1402


1.2.4.  м етаданные , у нифиц и р ован н ы е  проц едуры  и  язык  sql

 

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

Когда мы используем термин «язык», мы предполагаем некую программу, обеспечивающую интерпретацию текста запроса, и выполнение инструкций данного языка, содержащихся в тексте запроса. Если взять в качестве примера последний запрос (запрос3), то для ее интерпретации и выполнения необходимо выполнить следующие шаги:

– определить процедуру, которая должна выполнить данный запрос на языке

SQL. В нашем случае это будет процедура, которую условно назовем SELECT;

– в качестве входного атрибута этой процедуры по ключевому слову FROM оп-

ределяется имя таблицы СЛУЖАЩИЕ;

– в качестве критерия выборки по ключевому слову WHERE определяется ус-

ловие СЛЖ_СТАТ = "НЕТ";

– в качестве выходных данных процедуры после ключевого слова SELECT оп-

ределяются поля СЛЖ_ИМЯ, СЛЖ_НОМЕР выбранных записей;

– после определения всех необходимых данных процедура запускается и по- сле выполнения всех необходимых операций на физическом уровне пользователь получает результат в виде списка значений для полей СЛЖ_ИМЯ, СЛЖ_ НОМЕР.

К процедурам языка предъявляются весьма жесткие требования, так как они должны обеспечить выполнение произвольного синтаксически и семанти- чески правильно сформулированного запроса.

Чтобы описать принципы разработки таких процедур поставим перед собой

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

Сразу напрашивается решение:

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

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

 

CREATE LIST («Name: СТУДЕНТЫ», «Fields: ФИО, Группа»); DROP LIST («Name: СТУДЕНТЫ»);

INSERT («Список: СТУДЕНТЫ», «ФИО: Иванов И.И.», «Группа: ЭВМд‐31»); UPDATE («Список: СТУДЕНТЫ», «ФИО: Петров П.П.»);

SELECT (Группа FROM «СТУДЕНТЫ», WHERE «ФИО: Петров П.П.»); DELETE (FROM «СТУДЕНТЫ», WHERE «ФИО = Петров П.П.»).

 

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

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

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

Для хранения таких данных мы должны выделить таблицы с фиксирован- ными полями и записать в эти таблицы всю необходимую информацию о структуре списка:

– наименование файла, в котором хранится список;

– наименования полей записей;

– типы данных полей, что и определяет размер каждого поля записи;

– общий размер записи, определяемый по размерам отдельных полей.

Назовем таблицы, в которых хранятся данные о структурах записей спи-

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

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

нии типовых операций со списками.

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

В случае работы с табличными структурами хранение данных о произволь-

ной базе данных в фиксированных таблицах, т. е. в строго формализованном виде, также позволяет строить унифицированные процедуры для обработки данных базы данных, содержащей произвольное число таблиц, с любым числом атрибутов (в пределах допускаемых СУБД) и строк, между которыми могут иметь место различные взаимосвязи. Эти унифицированные процедуры состав- ляют ядро языка SQL, обеспечивают унифицированную обработку произволь- ных данных, хранящихся в таблицах баз данных, и вызываются с помощью ключевых слов CREATE, DROP, SELECT, INSERT, UPDATE, DELETE и т. д.