Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.) Жанр: Информационные системы и технологии Просмотров: 1430 |
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 и т. д.
|
|