КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Программный (встроенный) SQL
Основные задачи и сложности организации работы с БД Теоритические принципы создания приложений БД При работе с реляционными БД можно условно выделить 2 основные задачи: 1) собственно работа с БД, включающая создание и ведение БД; 2) создание пользовательских приложений, включающих разработку пользовательского интерфейса по работе с БД. Для решения указанных задач современные СУБД в своем составе могут содержать следующие программные средства: языки процедурного программирования, средства визуального программирования (графический интерфейс, диспетчер проекта, мастера и построители), средства создания объектно-ориентированных приложений. Так, например, при работе с СУБД ACCESS можно использовать мастер ACCESS и язык программирования VISUAL BASIC. Кроме этого, при разработке пользовательских программ во многих СУБД допускается использование других языков программирования, а также использование библиотек разного рода.· При создании базы данных и организации работы с ней возникают 3 основные проблемы: 1) собственно создание БД (создание таблиц, индексов, ограничений целостности); 2) обеспечение безопасности и разграничения доступа; 3) организация доступа к данным. Первая и вторая проблемы может быть решена посредством создания в каждой конкретной СУБД некоторой утилиты, позволяющей пользователю в определенный момент осуществлять все необходимые действия по созданию и ведению БД. Практически каждая современная СУБД включает подобные инструментальные средства, позволяющие пользователю в частности вводить и исполнять SQL-запросы в интерактивном режиме. Однако, основная работа с БД проводится с использованием прикладных программ, из которых и идут запросы к БД. В этом случае интерактивный режим работы не может быть использован. Для решения этой проблемы необходимы средства, дающие возможность формирования SQL-запросов во время работы прикладной программы. Одним из вариантов решения проблемы организация доступа к данным является программный (встроенный) SQL. ·
Программный (встроенный) SQL предназначен для того, чтобы встраивать SQL-запросы в прикладную программу, написанную на одном из языков программирования. При этом текст SQL-запроса должен быть либо включен в прикладную программу (если запрос полностью определен заранее), либо формироваться в процессе работы прикладной программы. При использовании программного SQL: - компилятор с алгоритмического языка должен иметь возможность выделения в тексте прикладной программы последовательность операторов SQL; - компилятор должен объединять возможности языка программирования высокого уровня (переменные, ветвления, циклы) и возможности SQL (запросы на языке, близком к естественному). Одна из основных идей программного SQL: часть действий по обработке запроса необходимо выполнять один раз, сохранять результат в некотором виде, а потом использовать столько раз, сколько необходимо. · Таким образом, программный SQL позволяет: 1) использовать операторы интерактивного SQL в тексте программы на языке программирования высокого уровня; 2) наряду с операторами интерактивного SQL использовать новые специальные конструкции, дополняющие SQL и увеличивающие его возможности; 3) для передачи параметров в запрос использовать в тексте запроса переменные, объявленные в программе; 4) возвращать в программу результаты запроса; 5) осуществлять компиляцию запросов совместно с программой, обеспечивая впоследствии согласованную работу программы и СУБД. Заранее (на этапе компиляции) выполнять действия по анализу и оптимизации запросов, экономя время, затрачиваемое на этапе выполнения программы. · Существуют два варианта встраивания запросов на языке SQL в прикладную программу (программного SQL): статический SQL и динамический SQL. Рассмотрим соответствующие варианты. · 1.3 Статический SQL Статический SQL – разновидность программного SQL, предназначенная для встраивания SQL-операторов в текст программы на языке программирования высокого уровня. Основная особенность статического SQL определяется его названием: встраиваемые запросы должны быть четко определены на стадии написания прикладной программы. Рассмотрим два основных этапа, связанных с работой статического SQL, – компиляция программы и работа (выполнение) программы. · Схема трансляции и сборки программы выглядит следующим образом (рисунок 1). 1. Программа, включающая операторы языка программирования высокого уровня (ЯПВУ) вместе с операторами SQL, подается на вход специального препроцессора, который выделяет из нее части, связанные с SQL. 2. Вместо инструкций встроенного SQL препроцессор подставляет вызовы специальных функций СУБД. Библиотеки таких функций для связи с языками программирования существуют для всех распространенных серверных СУБД. 3. Сами инструкции SQL препроцессор выделяет в отдельный файл. 4. Программа поступает на вход обычного компилятора языка программирования, после чего получаются объектные модули. Далее эти объектные модули вместе с библиотеками СУБД собираются в один исполняемый модуль – приложение. 5. Наряду с этими операциями происходит работа с файлом, содержащим SQL-инструкции. В литературе этот модуль часто носит название "модуль запросов к базе данных" (Database Request Module, DBRM). Обработку этого модуля осуществляет специальная утилита, которая обычно носит название BIND. Для каждой инструкции SQL утилита выполняет следующие действия: 5.1 осуществляет синтаксический анализ запроса (проверяет, является ли запрос корректным); 5.2 проверяет, существуют ли в базе данных те объекты, на которые ссылается запрос; 5.3 выбирает, каким образом осуществлять выполнение запроса – план выполнения запроса. 6. Все планы выполнения запросов сохраняются в СУБД для последующего использования.
Рисунок 1 – Схема компиляции программы с встроенными инструкциями статического SQL ·Схема выполнения программы выглядит следующим образом (рисунок 2). Программа запускается на выполнение обычным образом. При необходимости выполнить запрос программой осуществляется вызов специальной функции СУБД, которая отыскивает уже сформированный ранее план выполнения запроса. СУБД выполняет запрос в соответствии с выбранным планом. Результат выполнения запроса поступает в приложение. Рисунок 2 – Схема выполнения программы с встроенными инструкциями статического SQL Для реализации вышеуказанных схем статический SQL должен содержать дополнительные операторы (по сравнению с интерактивным SQL), позволяющие компилятору выделить в тексте программы SQL-запросы, объявлять используемые в этих запросах таблицы, объявлять переменные для обработки ошибок, как результатов реализации запросов и т. п. Однако, их рассмотрение выходит за рамки данного курса. · Использование описанной выше схемы компиляции/сборки/выполнения программы позволяет: 1) использовать SQL совместно с программой на языке программирования высокого уровня; 2) заранее осуществлять проверку синтаксиса запросов и оптимизацию их выполнения (выбор плана). Понятно, что проверка синтаксиса выполняется быстро, но выбор плана выполнения – весьма трудоемкая процедура. Тот факт, что она выполняется один раз на этапе компиляции, позволяет говорить о существенном уменьшении накладных расходов. · Однако, статическая разновидность программного SQL имеет некоторые существенные ограничения. Так, переменные в запросах могут использоваться только в тех местах, где в запросах обычно стоят константы. Например, нельзя задавать имя таблицы, из которой производится выборка, а также названия столбцов, как параметр. В связи с этим при использовании статического варианта вложенного (программного) SQL необходимо на этапе написания программы точно знать состав запросов, которые необходимо будет выполнять в прикладной программе. Во многих случаях это ограничение является существенным. Для его устранения была введена новая разновидность программного SQL – динамический SQL. Рассмотрим кратко основные идеи динамического SQL. · 1.4 Динамический SQL Динамический SQL – разновидность программного SQL, предназначенная для встраивания SQL-операторов в текст программы на языке программирования высокого уровня, допускающая динамическое формирование и выполнение запросов во время работы программы. История возникновения динамического SQL во многом связана с компанией IBM, внедрившей этот мощный инструмент в свою СУБД DB2. Стандарты SQL, в частности SQL-1, не поддерживали динамического SQL. Лишь в 1992 году в стандарт SQL-2 были включены спецификации динамического SQL. Основной концепцией динамического SQL является следующее утверждение: встроенная инструкция SQL не записывается в исходный текст программы, вместо этого программа формирует текст инструкции в памяти во время выполнения, а затем передает сформированную инструкцию в СУБД для выполнения. Напомним, что при использовании статического SQL схема реализации подразумевала два этапа – компиляцию программы и выполнение программы. При этом на этап компиляции ложилась основная нагрузка. Именно здесь решались вопросы проверки, разбора и оптимизации запросов, поскольку запрос был заранее известен. Совершенно очевидно, что подобную двухэтапную схему нельзя реализовать для динамического SQL, так как на этапе компиляции программы запрос неизвестен. Поэтому проверку, разборку и оптимизацию запросов здесь приходится выполнять непосредственно во время работы программы. Таким образом, если эти операции в статическом SQL выполнялись во время компиляции один раз, то в динамическом SQL они будут выполняться столько раз для одного запроса, сколько раз он будет сформирован в процессе работы прикладной программы. Это определяет существенный недостаток динамического SQL– низкую производительность по сравнению со статическим. Достоинство динамического SQL в том, что он позволяет формировать запрос к базе данных во время работы программы, реагируя на те или иные произошедшие события. Такая возможность является жизненно важной для клиент-серверной и трехзвенной архитектур, в которых структура базы данных и деловые правила имеют тенденцию к изменению, что требует определенной гибкости при организации процесса обработки данных. Рассмотрим схему выполнения динамического запроса SQL. Схема предусматривает одноэтапное и двухэтапное выполнение инструкций. · Одноэтапное выполнение инструкций подразумевает (рисунок 3): 1) динамическое формирование команды SQL в строковом виде во время работы программы; 2) передачу строкового вида инструкции в СУБД при помощи команды EXECUTE IMMEDIATE; 3) выполнение инструкции системой управления БД, включающее синтаксический анализ, проверку параметров, оптимизацию (выбор плана) и выполнение этого плана. Рисунок 3 – Схема выполнения программы со встроенными инструкциями динамического SQL с применением одноэтапной схемы Основная проблемы одноэтапной схемы заключаются в том, что она приводит к нерациональному расходованию вычислительных ресурсов (т.к. при повторном выполнении той же инструкции вновь будет затрачено время на все те же действия по ее интерпретации и выполнению). · Двухэтапное выполнение инструкций основано на следующем соображении: скорее всего, команда динамического SQL в таком виде, как она поступает на выполнение, будет выполняться неоднократно. При этом могут меняться какие-то конкретные детали. А это значит, что инструкцию можно параметризовать. Использование параметризованных инструкций позволяет сделать схему выполнения двухэтапной, разделив процесс на "подготовку инструкции" и "выполнение инструкции" (рисунок 4). Рисунок 4 – Схема выполнения программы со встроенными инструкциями динамического SQL с применением двухэтапной схемы На этапе подготовки можно осуществить синтаксический анализ инструкции, интерпретировать ее и подготовиться к выполнению, выбрав план выполнения. На этапе выполнения СУБД подставляет значения параметров (полученные из программы) и использует сформированный ранее план выполнения для достижения результата. При этом реализуется идея однократного выполнения тех действий, которые можно выполнить один раз. Так, подготовленная один раз инструкция может быть выполнена многократно с разными значениями параметров. ·
Дата добавления: 2015-05-09; Просмотров: 2928; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |