Как видим, такой способсоздания приложений чрезвычайно гибок, позволяет реализовать практически любоеприложение, но в то же время имеет явные недостатки:
разработка клиентскойпрограммы возможна только для той операционной системы и на том языкепрограммирования, который поддерживатеся библиотекой, необходим драйвер базыданных, который определяет допустимые типы сетевых интерфейсов, большой объемкодирования, нестандартизованные библиотечные функции.
В результате получаемприложение, которое привязано как к сетевой среде, так и кпрограммно-аппаратной платформе и используемой базе данных.
Некоторой модификациейданного способа является использование "встроенного" языка SQL. Вэтом случае в текст программы на языке третьего поколения включаются не вызовыбиблиотек, а непосредственно предложения SQL, которые предваряются ключевымвыражением "EXEC SQL". Перед компиляцией в машинный код такаяпрограмма обрабатывается препроцессором, который транслирует смесь операторов"собственного" языка СУБД и операторов SQL в "чистый"исходный код. Затем коды SQL замещаются вызовами соответствующих процедур избиблиотек исполняемых модулей, служащих для поддержки конкретного вариантаСУБД.
Такой подход позволил несколькоснизить степень привязанности к СУБД, например, при переключении прикладнойпрограммы на работу с другим сервером базы данных достаточно было зановообработать ее исходный текст новым препроцессором и перекомпилировать.
По традиции, как и сомногими стандартами в IT-индустрии, с языком SQL возникла проблема: на каком-тоэтапе многие производители использующего SQL программного обеспечения решили,что функционал в текущей (на тот момент времени) версии стандарта недостаточен,и его желательно расширить. В результате у разных производителей системуправления баз данных (СУБД) в ходу разные диалекты SQL, в общем случае междусобой несовместимые.
Среди недостатковиспользования стандартов оказывается ограничение гибкости и функциональныхвозможностей конкретной реализации. Под реализацией языка SQL понимаетсяпрограммный продукт SQL соответствующего производителя. Для расширенияфункциональных возможностей многие разработчики, придерживающиеся принятыхстандартов, добавляют к стандартному языку SQL различные расширения.
Все конкретныереализации языка несколько отличаются друг от друга. В интересах самих жепроизводителей гарантировать, чтобы их реализация соответствовала современнымстандартам ANSI в части переносимости и удобства работы пользователей. Тем неменее каждая реализация SQL содержит усовершенствования, отвечающие требованиямтого или иного сервера баз данных. Эти усовершенствования или расширения языкаSQL представляют собой дополнительные команды и опции, являющиеся добавлениямик стандартному пакету и доступные в данной конкретной реализации.
До 1996 года вопросамисоответствия коммерческих реализаций SQL стандарту занимался в основномНациональный институт стандартов и технологий (NIST), который и устанавливалуровень соответствия стандарту. Поздне́е подразделение, занимавшееся СУБД,было расформировано, и на текущий момент все усилия по проверке СУБД насоответствие стандарту ложатся на её производителя.
Положение изменилось свведением стандарта SQL:1999. Отныне стандарт приобрёл модульную структуру —основная часть стандарта была вынесена в раздел «SQL/Foundation», все остальныебыли выведены в отдельные модули. Соответственно, остался только один уровеньсовместимости — Core, что означало поддержку этой основной части. Поддержкаостальных возможностей оставлена на усмотрение производителей СУБД.
В настоящее время языкSQL поддерживается многими десятками СУБД различных типов.
Строго говоря, SQL неявляется языком программирования согласно определению этого термина. SQLпредставляет собой субъязык данных, предназначенный для использования только вкачестве интерфейса с БД. Сам по себе SQL не содержит тех средств, которыенеобходимы для разработки законченных программ. Подобные задачи должны решатьсялибо с помощью языков программирования или управления заданиями, либоинтерактивно, в результате действий, выполняемых самим пользователем. Попричине подобной незавершенности в плане организации вычислительного процессаязык SQL может применяться в форме одной из трех прикладных реализаций:
1. Интерактивный(или автономный) SQL дает возможность пользователям непосредственно извлекатьинформацию из базы или записывать в нее данные. Информация, получаемая позапросу SQL, может быть выдана на экран, переадресована в файл или на принтер.
2. Статический SQLпозволяет записать фиксированный исполняемый код SQL, он обычно используется вприложениях на процедурных языках.
Есть две разновидностистатического SQL: встроенный и модульный.
Встроенный SQLопределен как код SQL, который включен в исходный текст программы, написаннойна другом языке программирования. В реальной жизни большинство приложенийразрабатываются на алгоритмических языка (например, Си или Кобол), однако дляобращения к БД используется встроенный SQL.
В модульном вариантеоператоры SQL записаны в отдельных модулях, которые компонуются с модулямиосновного языка. В первый стандарт – SQL86 – был включен только модульный SQL,а встроенный SQL не нашел себе места в официальной части стандарта, хотя и былприведен в приложении. Сегодня встроенный SQL пользуется гораздо большейпопулярностью среди разработчиков, чем модульный, и стандарт SQL92 поддерживаетобе версии статического SQL.
3. ДинамическийSQL дает возможность генерировать код SQL во время исполнения приложения ииспользуется вместо статического SQL в тех случаях, когда при разработкеприложения необходимый код SQL еще не может быть определен или зависит от того,какой выбор сделает пользователь.
Операторы динамическогоSQL обычно применяются в диалоговыхсредах для построения запросов и в графических средствах разработки приложенийБД.
Реализация в SQLконцепции операций, ориентированных на табличное представление данных,позволила создать компактный язык с небольшим набором предложений. Язык SQLможет использоваться как для выполнения запросов к данным, так и для построенияприкладных программ.
Основные категориикоманд языка SQL предназначены длявыполнения различных функций, включая построение объектов базы данных иманипулирование ими, начальную загрузку данных в таблицы, обновление и удалениесуществующей информации, выполнение запросов к базе данных, управление доступомк ней и ее общее администрирование.
Основные категориикоманд языка SQL:
DDL– язык определения данных;
DML– язык манипулирования данными;
DQL– язык запросов;
DCL– язык управления данными;
командыадминистрирования данных;
команды управлениятранзакциями
Определение структурбазы данных (DDL)
Язык определения данных(Data DefinitionLanguage, DDL)позволяет создавать и изменять структуру объектов базы данных, например,создавать и удалять таблицы. Основными командамиязыка DDL являются следующие: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATEINDEX, ALTER INDEX, DROP INDEX.
Манипулирование данными(DML)
Язык манипулированияданными (DataManipulationLanguage, DML)используется для манипулирования информацией внутри объектов реляционной базыданных посредством трех основных команд: INSERT,UPDATE, DELETE.
Выборка данных (DQL)
Язык запросов DQLнаиболее известен пользователям реляционной базы данных, несмотря на то, что онвключает всего одну команду SELECT.Эта команда вместе со своими многочисленными опциями и предложениямииспользуется для формирования запросов к реляционной базе данных.
Язык управления данными(DCL - DataControlLanguage)
Команды управленияданными позволяют управлять доступом к информации, находящейся внутри базыданных. Как правило, они используются для создания объектов, связанных сдоступом к данным, а также служат для контроля над распределением привилегиймежду пользователями. Команды управления данными следующие: GRANT,REVOKE.
Командыадминистрирования данных
С помощью команд администрированияданных пользователь осуществляет контроль за выполняемыми действиями ианализирует операции базы данных; они также могут оказаться полезными прианализе производительности системы. Не следует путать администрирование данныхс администрированием базы данных, которое представляет собой общее управлениебазой данных и подразумевает использование команд всех уровней.
Команды управлениятранзакциями
Существуют следующиекоманды, позволяющие управлять транзакциями базы данных: COMMIT,ROLLBACK, SAVEPOINT,SET TRANSACTION.
Язык SQLявляется основой многих СУБД, т.к. отвечает за физическое структурирование изапись данных на диск, а также за чтение данных с диска, позволяет принимать SQL-запросыот других компонентов СУБД и пользовательских приложений. Таким образом, SQL– мощный инструмент, который обеспечивает пользователям, программам ивычислительным системам доступ к информации, содержащейся в реляционных базахданных.
Основные достоинстваязыка SQL заключаются вследующем:
стандартность– как уже было сказано, использование языка SQLв программах стандартизировано международными организациями;
независимость отконкретных СУБД – все распространенные СУБД используют SQL,т.к. реляционную базу данных можно перенести с одной СУБД на другую сминимальными доработками;