Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

1.3.5.Язык sql и унифицированные процедуры

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

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

  • определить процедуру, которая должна выполнить данный запрос на языке SQL. В нашем случае это будет процедура, которую условно назовем SELECT;

  • в качестве входного атрибута этой процедуры по ключевому слову FROM определяется имя таблицы СЛУЖАЩИЕ;

  • в качестве критерия выборки записей таблицы СЛУЖАЩИЕ по ключевому слову WHERE определяется условие СЛЖ_СТАТ = "НЕТ";

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

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

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

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

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

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

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

CREATE LIST («Name: ххх», «Field1: ххх, type: zzz»,...,«Field_N: ххх, type: zzz»),

DROP LIST («Name: ххх»);

INSERT («Name: ххх», «Field_1: ууу»,...,«Field_N: ууу»);

UPDATE («Name: ххх», «Field_i: ууу»);

SELECT («Name: ххх», WHERE «Field = ууу»);

DELETE («Name: ххх», WHERE «Field = ууу»).

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

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

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

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

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

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

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

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

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

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

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

С созданным списком можно будет выполнять операции

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

UPDATE («Список: СТУДЕНТЫ», «ФИО: Петров П.П.»);

SELECT («Список: СТУДЕНТЫ», WHERE «Группа = ЭВМд-31»);

DELETE («Список: СТУДЕНТЫ», WHERE «Группа = ЭВМд-31»).

реализуемые унифицированными процедурами.

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

DROP LIST («Список: СТУДЕНТЫ»).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]