Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МР - занятие № 2.doc
Скачиваний:
2
Добавлен:
24.08.2019
Размер:
308.22 Кб
Скачать
    1. Взаимодействие приложений и субд

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

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

  • Второй вариант представляет форму взаимодействия, когда с языком программирования поставляется несколько библиотек, которые реализуют возможность взаимодействия с СУБД, например, посредством включения набора классов, которые упрощает это взаимодействие и упрощающих его. Данный подход является наиболее распространенным в настоящее время и используется, например, в таких языках программирования как C++, C#, Java. При этом SQL-запросы передаются чаще всего в текстовой форме. Для формирования подобных запросов служит часть языка, называемая динамическим SQL. Основной принцип работы в этом случае является передача запроса к СУБД, которая получив его производит компиляцию, оптимизацию и выполнение данного запроса, после чего результаты возвращаются запросившему приложению. В данном случае имеется проигрыш, заключающийся в том, что каждый раз приходится при обращении к СУБД компилировать запросы, что снижает скорость их выполнения. Для решения этой задачи были разработаны так называемые постоянные хранимые модули (PSM) или хранимые процедуры (stored procedures), которые представляют собой набор инструкций SQL-языка, которые имеют параметры и возвращают (или не возвращают) результат своего выполнения. Данные процедуры разрабатываются один раз, компилируются, оптимизируются. После этого они многократно используются, получая лишь параметры для своего выполнения. Подобные процедуры разрабатываются для основных, наиболее часто используемых запросов к БД, что повышает производительность работы СУБД по обработке запросов.

  1. Домены, отношения и базовые переменные-отношения

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

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

Реляционная модель является теорией, а в большинстве теорий используется собственная специальная терминология. И данная теория не является исключением.

На рис. 2.7 представлены термины описания структуры данных в рамках реляционной модели.

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

Рис. 2.7. Термины, используемые для описания структуры данных

    1. Домены

Домен – это не что иное, как тип данных. В частности, возможно, простой, определяемый системой, подобно типам INTEGER и CHAR. В общем случае этот тип определяется пользователем.

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

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

Таким образом, желательно, чтобы система проводила строгий контроль типов и выдавала ошибки в случае обнаружения несоответствий.

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

Типы данных можно разделить на скалярные и нескалярные. Нескалярные типы, явно определенные таким образом, что в них есть компоненты, видимые для пользователя (например, тип отношения). Скалярные типы, напротив, видимых пользователю компонент не имеют.