ЯЗЫК SQL
Стремительный рост популярности
SQL является одной из самых важных тенденций
в современной компьютерной промышленности.
За несколько последних лет SQL стал единственным
языком баз данных. На сегодняшний день SQL
поддерживают свыше ста СУБД, работающих как
на персональных компьютерах, так и на
больших ЭВМ. Был принят, а затем дополнен
официальный международный стандарт на SQL.
Язык SQL является важным звеном в
архитектуре систем управления базами
данных, выпускаемых всеми ведущими
поставщиками программных продуктов, и
служит стратегическим направлением
разработок компании Microsoft в области баз
данных. Зародившись в результате
выполнения второстепенного
исследовательского проекта компании IBM, SQL
сегодня широко известен и в качестве
мощного рыночного фактора.
SQL является инструментом, предназначенным
для обработки и чтения данных, содержащихся
в компьютерной базе данных. SQL - это
сокращенное название структурированного
языка запросов (Structured Query Language). Как следует
из названия, SQL является языком
программирования, который применяется
для организации взаимодействия
пользователя с базой данных. На самом деле
SQL работает только с базами данных одного
определенного типа, называемых реляционными.
На рис. 2.1 изображена схема работы SQL

Согласно этой схеме, в вычислительной
системе имеется база данных, в которой
хранится важная информация. Если
вычислительная система относится к сфере
бизнеса, то в базе данных может храниться
информация о материальных ценностях,
выпускаемой продукции, объемах продаж и
зарплате. В базе данных на персональном
компьютере может храниться информация о
выписанных чеках, телефонах и адресах или
информация, извлеченная из более крупной
вычислительной системы. Компьютерная
программа, которая управляет базой данных,
называется системой управления базой
данных, или СУБД.
Если пользователю необходимо
прочитать данные из базы данных, он
запрашивает их у СУБД с помощью SQL. СУБД
обрабатывает запрос, находит требуемые
данные и посылает их пользователю. Процесс
запрашивания данных и получения результата
называется запросом к базе данных:
отсюда и название — структурированный язык
запросов.
Однако это название не совсем
соответствует действительности. Во-первых,
сегодня SQL представляет собой нечто гораздо
большее, чем простой инструмент создания
запросов, хотя именно для этого он и был
первоначально предназначен. Несмотря на то,
что чтение данных по-прежнему остается
одной из наиболее важных функций SQL, сейчас
этот язык используется для реализации всех
функциональных возможностей, которые СУБД
предоставляет пользователю, а именно:
- Организация данных.
SQL дает
пользователю возможность изменять
структуру представления данных, а также
устанавливать отношения между элементами
базы данных.
- Чтение данных.
SQL дает пользователю
или приложению возможность читать из базы
данных содержащиеся в ней данные и
пользоваться ими.
- Обработка ванных.
SQL дает пользователю
или приложению возможность изменять базу
данных, т.е. добавлять в нее новые данные, а
также удалять или обновлять уже имеющиеся
в ней данные.
- Управление доступом.
С помощью SQL
можно ограничить возможности
пользователя по чтению и изменению данных
и защитить их от несанкционированного
доступа.
- Совместное использование данных.
SQL
координирует совместное использование
данных пользователями, работающими
параллельно, чтобы они не мешали друг
другу.
- Целостность данных.
SQL позволяет
обеспечить целостность базы данных,
защищая ее от разрушения из-за
несогласованных изменений или отказа
системы.
Таким образом, SQL является
достаточно мощным языком для
взаимодействия с СУБД.
Во-вторых, SQL — это не полноценный
компьютерный язык типа COBOL, FORTRAN или С. В SQL
нет оператора IF для проверки условий, нет
оператора GOTO для организации переходов и
нет операторов DO или FOR для создания циклов.
SQL является подъязыком баз данных, в
который входит около тридцати операторов,
предназначенных для управления базами
данных. Операторы SQL встраиваются в
базовый язык, например COBOL, FORTRAN или С, и дают
возможность получать доступ к базам данных.
Кроме того, из такого языка, как С, операторы
SQL можно посылать СУБД в явном виде,
используя интерфейс вызовов функций.
Наконец, SQL — это слабо
структурированный язык, особенно по
сравнению с такими сильно
структурированными языками, как С или Pascal.
Операторы SQL напоминают английские
предложения и содержат "слова-пустышки",
не влияющие на смысл оператора, но
облегчающие его чтение. В SQL почти нет
нелогичностей, к тому же имеется ряд
специальных правил, предотвращающих
создание операторов SQL, которые выглядят
как абсолютно правильные, но не имеют
смысла.
Несмотря на не совсем точное
название, SQL на сегодняшний день является единственным
стандартным языком для работы с
реляционными базами данных. SQL — это
достаточно мощный и в то же время
относительно легкий для изучения язык.
Сам по себе SQL не является ни
системой управления базами данных, ни
отдельным программным продуктом. Нельзя
пойти в компьютерный магазин и "купить SQL".
SQL — это неотъемлемая часть СУБД,
инструмент, с помощью которого
осуществляется связь пользователя с ней. На
рис. 2.2. изображена структурная
схема типичной СУБД, компоненты которой
соединяются в единое целое с помощью SQL (своего
рода "клея").

Ядро базы данных является
сердцевиной СУБД; оно отвечает за
физическое структурирование и запись
данных на диск, а также за физическое чтение
данных с диска. Кроме того, оно принимает SQL-запросы
от других компонентов СУБД (таких как
генератор форм, генератор отчетов или
модуль формирования интерактивных
запросов), от пользовательских приложений и
даже от других вычислительных систем. Как
видно из рисунка, SQL выполняет много
различных функций:
- SQL — интерактивный язык запросов.
Пользователи вводят команды SQL в
интерактивные программы,
предназначенные для чтения данных и
отображения их на экране. Это удобный
способ выполнения специальных запросов.
- SQL — язык программирования баз данных.
Чтобы получить доступ к базе данных,
программисты вставляют в свои программы
команды SQL. Эта методика используется как
в программах, написанных пользователями,
так и в служебных программах баз данных (таких
как генераторы отчетов и инструменты
ввода данных).
- SQL — язык администрирования баз данных.
Администратор базы данных, находящейся
на мини-компьютере или на большой ЭВМ,
использует SQL для определения структуры
базы данных и управления доступом к
данным.
- SQL — язык создания приложений клиент/сервер,
и программах для персональных
компьютеров SQL используется для
организации связи через локальную сеть с
сервером базы данных, в которой хранятся
совместно используемые данные. В
большинстве новых приложений
используется архитектура клиент/сервер,
которая позволяет свести к минимуму
сетевой трафик и повысить быстродействие
как персональных компьютеров, так и
серверов баз данных.
- SQL — язык распределенных баз данных.
В системах управления распределенными
базами данных SQL помогает распределять
данные среди нескольких
взаимодействующих вычислительных систем.
Программное обеспечение каждой системы
посредством использования SQL связывается
с другими системами, посылая им запросы
на доступ к данным.
- SQL — язык шлюзов базы данных. В
вычислительных сетях с различными СУБД SQL
часто используется в шлюзовой
программе, которая позволяет СУБД
одного типа связываться с СУБД другого
типа.
Таким образом, SQL превратился в
полезный и мощный инструмент,
обеспечивающий людям, программам и
вычислительным системам доступ к
информации, содержащейся в реляционных
базах данных.
SQL — это легкий для понимания
язык и в то же время универсальное
программное средство управления данными.
Успех языку SQL принесли следующие
его особенности:
• независимость от конкретных
СУБД;
• переносимость с одной
вычислительной системы на другую;
• наличие стандартов;
• одобрение компанией IBM (СУБД DB2);
• поддержка со стороны компании
Microsoft (протокол ODBC);
• реляционная основа;
• высокоуровневая структура,
напоминающая английский язык;
• возможность выполнения
специальных интерактивных запросов:
• обеспечение программного
доступа к базам данных;
• возможность различного
представления данных;
• полноценность как языка,
предназначенного для работы с базами
данных;
• возможность динамического
определения данных;
• поддержка архитектуры клиент/сервер.
Все перечисленные выше факторы
явились причиной того, что SQL стал
стандартным инструментом для управления
данными на персональных компьютерах, мини-компьютерах
и больших ЭВМ. Ниже эти факторы рассмотрены
более подробно.
Все ведущие поставщики СУБД
используют SQL, и ни одна новая СУБД, не
поддерживающая SQL, не может рассчитывать на
успех. Реляционную базу данных и программы,
которые с ней работают, можно перенести с
одной СУБД на другую с минимальными
доработками и переподготовкой персонала.
Программные средства, входящие в состав
СУБД для персональных компьютеров, такие
как программы для создания запросов,
генераторы отчетов и генераторы приложений,
работают с реляционными базами данных
многих типов. Таким образом, SQL обеспечивает
независимость от конкретных СУБД, что
является одной из наиболее важных причин
его популярности.
Поставщики СУБД предлагают
программные продукты для различных
вычислительных систем: от персональных
компьютеров и рабочих станций до локальных
сетей, мини-компьютеров и больших ЭВМ.
Приложения, созданные с помощью SQL и
рассчитанные на однопользовательские
системы, по мере своего развития могут быть
перенесены в более крупные системы.
Информация из корпоративных реляционных
баз данных может быть загружена в базы
данных отдельных подразделений или в
личные базы данных. Наконец, приложения для
реляционных баз данных можно вначале
смоделировать на экономичных персональных
компьютерах, а затем перенести на дорогие
многопользовательские системы.
Официальный стандарт языка SQL был
опубликован Американским институтом
национальных стандартов (American National Standards
Institute — ANSI) и Международной организацией по
стандартам (International Standards Organization — ISO) в 1986
году и значительно расширен в 1992 году. Кроме
того, SQL является федеральным стандартом
США по обработке информации (FIPS — Federal
Information Processing Standard) и, следовательно,
соответствие ему является одним из
основных требований, содержащихся в
больших правительственных контрактах,
относящихся к области вычислительной
техники. В Европе стандарт X/OPEN для
переносимой среды программирования на
основе операционной системы UNIX включает в
себя SQL в качестве стандарта для доступа к
базам данных. SQL Access Group — консорциум
поставщиков компьютерного оборудования и
баз данных — определил для SQL стандартный
интерфейс вызовов функций, который
является основой протокола ODBC компании
Microsoft и входит также в стандарт X/OPEN. Эти
стандарты служат как бы официальной
печатью, одобряющей SQL, и они ускорили
завоевание им рынка.
SQL был придуман научными
сотрудниками компании IBM и широко
используется ею во множестве пакетов
программного обеспечения. Подтверждением
этому служит флагманская СУБД DB2 компании IBM.
Все основные семейства компьютеров
компании IBM поддерживают SQL: система PS/2 для
персональных компьютеров, система среднего
уровня AS/400. система RS/6000 на базе UNIX, а также
операционные системы MVS и VM больших ЭВМ.
Широкая поддержка SQL фирмой IBM ускорила его
признание и еще в самом начале
возникновения и развития рынка баз данных
явилась своего рода недвусмысленным
указанием для других поставщиков баз
данных и программных систем, в каком
направлении необходимо двигаться.
Компания Microsoft рассматривает
доступ к базам данных как важную часть
своей операционной системы Windows. Стандартом
этой компании по обеспечению доступа к
базам данных является ODBC (Open Database Connectivity —
взаимодействие с открытыми базами данных)
— программный интерфейс, основанный на SQL.
Протокол ODBC поддерживается наиболее
распространенными приложениями Windows (электронными
таблицами, текстовыми процессорами, базами
данных и т.п.), разработанными как самой
компанией Microsoft, так и другими ведущими
поставщиками. Поддержка ODBC обеспечивается
всеми ведущими реляционными базами данных.
Кроме того, ODBC опирается на стандарты,
одобренные консорциумом поставщиков SQL Access
Group, что делает ODBC как стандартом де-факто
компании Microsoft, так и стандартом,
независимым от конкретных СУБД.
SQL является языком реляционных
баз данных, поэтому он стал популярным
тогда, когда популярной стала реляционная
модель представления данных. Табличная
структура реляционной базы данных
интуитивно понятна пользователям, поэтому
язык SQL является простым и легким для
изучения. Реляционная модель имеет
солидный теоретический фундамент, на
котором были основаны эволюция и
реализация реляционных баз данных. На волне
популярности, вызванной успехом
реляционной модели, SQL стал единственным
языком для реляционных баз данных.
напоминающая английский
язык
Операторы SQL выглядят как обычные
английские предложения, что упрощает их
изучение и понимание. Частично это
обусловлено тем, что операторы SQL описывают
данные, которые необходимо получить, а не определяют
способ их поиска. Таблицы и столбцы в
реляционной базе данных могут иметь
длинные описательные имена. В результате
большинство операторов SQL означают именно
то, что точно соответствует их именам,
поэтому их можно читать как простые,
понятные предложения.
SQL является языком интерактивных
запросов, который обеспечивает
пользователям немедленный доступ к данным.
С помощью SQL пользователь может в
интерактивном режиме получить ответы на
самые сложные запросы в считанные минуты
или секунды, тогда как программисту
потребовались бы дни или недели, чтобы
написать для пользователя соответствующую
программу. Из-за того, что SQL допускает
немедленные запросы, данные становятся
более доступными и могут помочь в принятии
решений, делая их более обоснованными.
Программисты пользуются языком
SQL, чтобы писать приложения, в которых
содержатся обращения к базам данных. Одни и
те же операторы SQL используются как для
интерактивного, так и для программного
доступа, поэтому части программ, содержащие
обращения к базе данных, можно вначале
тестировать в интерактивном режиме, а затем
встраивать в программу. В традиционных
базах данных для программного доступа
используются одни программные средства, а
для выполнения немедленных запросов —
другие, без какой либо связи между этими
двумя режимами доступа.
С помощью SQL создатель базы может
сделать так, что различные пользователи
базы данных будут видеть различные
представления её структуры и содержимого.
Например, базу данных можно спроектировать
таким образом, что каждый пользователь
будет видеть только данные, относящиеся к
его подразделению или торговому региону.
Кроме того, данные из различных частей базы
данных могут быть скомбинированы и
представлены пользователю в виде одной
простой таблицы. Следовательно,
представления можно использовать для
усиления защиты базы данных и ее настройки
под конкретные требования отдельных
пользователей.
Первоначально SQL был задуман как
язык интерактивных запросов, но сейчас он
вышел далеко за рамки чтения данных. SQL
является полноценным и логичным языком,
предназначенным для создания базы данных,
управления ее защитой, изменения ее
содержимого, чтения данных и совместного
использования данных несколькими
пользователями, работающими параллельно.
Приемы, освоенные при изучении одного
раздела языка, могут затем применяться в
других командах, что повышает
производительность работы пользователей.
С помощью SQL можно динамически
изменять и расширять структуру базы данных
даже в то время, когда пользователи
обращаются к ее содержимому. Это большое
преимущество перед языками статического
определения данных, которые запрещают
доступ к базе данных во время изменения ее
структуры. Таким образом, SQL обеспечивает
максимальную гибкость, так как дает базе
данных возможность адаптироваться к
изменяющимся требованиям, не прерывая
работу приложения, выполняющегося в
реальном масштабе времени.
SQL — естественное средство для
реализации приложений клиент/сервер. В этой
роли SQL служит связующим звеном между
клиентской системой, взаимодействующей с
пользователем, и серверной системой,
управляющей базой данных, позволяя каждой
системе сосредоточиться на выполнении
своих функций. Кроме того, SQL позволяет
персональным компьютерам функционировать
в качестве клиентов по отношению к сетевым
серверам или более крупным базам данных,
установленным на больших ЭВМ; это позволяет
получать доступ к корпоративным данным из
приложений, работающих на персональных
компьютерах.
Одним из наиболее важных шагов на
пути к признанию SQL на рынке стало появление
стандартов на этот язык. Обычно при
упоминании стандарта SQL имеют в виду
официальный стандарт, утвержденный
Американским институтом национальных
стандартов (American National Standards Institute — ANSI) и
Международной организацией по стандартам (International
Standards Organization— ISO). Однако существуют и
другие важные стандарты SQL, включая SQL,
реализованный в системе DB2 компании IBM, и
стандарт X/OPEN для SQL в среде UNIX.
Работа над официальным
стандартом SQL началась в 1982 году, когда ANSI
поставил перед своим комитетом ХЗН2 задачу
по созданию стандарта языка реляционных
баз данных. Вначале в комитете обсуждались
достоинства различных предложенных языков.
Однако поскольку к тому времени SQL уже стал
фактическим стандартом, комитет ХЗН2
остановил свой выбор на нем и занялся
стандартизацией SQL.
Разработанный в результате
стандарт в большой степени был основан на
диалекте SQL системы DB/2, хотя и содержал в
себе ряд существенных отличий от этого
диалекта. После нескольких доработок, в 1986
году стандарт был официально утвержден как
стандарт ANSI номер Х3.135, а в 1987 году — в
качестве стандарта ISO. Затем стандарт ANSI/ISO
был принят правительством США как
федеральный стандарт США по обработке
информации (FIPS — Federal Information Processing Standard).
Этот стандарт, незначительно
пересмотренный в 1989 году, обычно называют
стандартом "SQL-89", ил"SQLI". Когда в
данной книге упоминается "стандарт ANSI/ISO",
то подразумевается SQLI, который в настоящее
время лежит в основе большинства
коммерческих продуктов.
Многие из членов комитетов по
стандартизации ANSI и ISO представляли фирмы-поставщики
различных СУБД, в каждой из которых был
реализован собственный диалект SQL. Как и
диалекты человеческого языка, диалекты SQL
были в основном похожи друг на друга, однако
несовместимы в деталях. Во многих случаях
комитет просто обошел существующие
различия и не стандартизировал некоторые
части языка, определив, что они реализуются
по усмотрению разработчика. Этот подход
позволил объявить большое число реализаций
SQL совместимыми со стандартом, однако
сделал сам стандарт относительно слабым.
Чтобы заполнить эти пробелы,
комитет ANSI продолжил свою работу и создал
проект нового, более жесткого стандарта SQL2.
В отличие от стандарта 1989 года, проект SQL2
предусматривал возможности, выходящие за
рамки таковых, уже существующих в реальных
коммерческих продуктах. А для следующего за
ним стандарта SQL3 были предложены еще более
глубокие изменения. В результате
предложенные стандарты SQL2 и SQL3 оказались
более противоречивыми, чем исходный
стандарт. Стандарт SQL2 прошел процесс
утверждения в ANSI и был окончательно принят
в октябре 1992 года. В то время, как первый
стандарт 1986 года занимает не более ста
страниц, официальный стандарт SQL2 содержит
около шестисот.
Вопреки стандарту SQL2, во всех
существующих на сегодняшний день
коммерческих продуктах поддерживаются
собственные диалекты SQL. Более того,
поставщики СУБД включают в свои продукты
новые возможности и расширяют собственные
диалекты SQL, чем еще больше отдаляют их от
стандарта. Однако ядро SQL стандартизировано
довольно жестко. Там, где это можно было
сделать, не ущемляя интересы клиентов,
поставщики СУБД привели свои продукты в
соответствие со стандартом SQL-89, то же самое
постепенно произойдет и с SQL2.
Хотя стандарт ANSI/ISO наиболее
широко распространен, он не является
единственным стандартом SQL. Европейская
группа поставщиков X/OPEN также приняла SQL в
качестве одного из своих стандартов для "среды
переносимых приложений" на основе UNIX.
Стандарты группы X/OPEN играют важную роль на
европейском компьютерном рынке, где
основной проблемой является переносимость
приложений между компьютерными системами
различных производителей. К несчастью,
стандарт X/OPEN отличается от стандарта ANSI/ISO.
Кроме того, компания IBM включила
SQL в свою спецификацию Systems Application Architecture (архитектура
прикладных систем) и пообещала, что все ее
продукты, очевидно, будут переведены на
этот диалект SQL. Хотя данная спецификация и
не оправдала надежд на унификацию линии
продуктов компании IBM, движение в сторону
унификации SQL в IBM продолжается. Система DB2
остается основной СУБД компании IBM для
мэйнфреймов. Однако компания выпустила
реализацию DB2 и для OS/2собственной
операционной системы для персональных
компьютеров, и для линии серверов и рабочих
станций RS/6000, работающих под управлением UNIX.
Таким образом, диалект DB2 языка SQL является
мощным стандартом де-факто.
В технологии баз данных
существует важная область, которую не
затрагивают официальные стандарты. Это способность
к взаимодействию с другими базами данных
— методы, с помощью которых различные базы
данных могут обмениваться данными (как
правило, по сети). В 1989 году несколько
поставщиков сформировали консорциум SQL Access
Group специально для решения этой проблемы. В
1991 году консорциум опубликовал
спецификацию RDA (Remote Database Access — удаленный
доступ к базам данных). К несчастью, эта
спецификация тесно связана с протоколами OSI,
которые не смогли завоевать широкого
признания, поэтому она оказывает на рынок
незначительное влияние. Прозрачность
взаимодействия между различными базами
данных остается иллюзорной мечтой.
Тем не менее, второй стандарт от
SQL Access Group имеет на рынке больший вес. В
результате настойчивых требований
компании Microsoft, консорциум SQL Access Group включил
в стандарт SQL интерфейс вызовов функций.
Полученная спецификация CLI (Call Level Interface),
основанная на разработках компании Microsoft,
увидела свет в 1992 году. В этом же году
была опубликована собственная
спецификация ODBC (Open Database Connectivity —
взаимодействие с открытыми базами данных)
компании Microsoft, основанная на стандарте CLI.
Благодаря рыночной силе Microsoft и
благословению, полученному "открытым
стандартом" от SQL Access Group, ODBC оказался
стандартом де-факто для интерфейсов
доступа к базам данных на персональных
компьютерах. Весной 1993 года компании Apple и
Microsoft объявили о соглашении относительно
поддержки ODBC в MacOS и Windows, что закрепило за
этой спецификацией статус стандарта в
обеих популярных средах с графическим
пользовательским интерфейсом.
Появление стандарта SQL вызвало
довольно много восторженных заявлений о
переносимости SQL и использующих его
приложений. Для иллюстрации того, как любое
приложение, используя SQL, может работать с
любой СУБД, часто приводят диаграммы,
подобные изображенной на рис. 3.1. На самом
деле пробелы в стандарте SQL-89 и различия
между существующими диалектами SQL
достаточно значительны, и при переводе
приложения под другую СУБД его всегда
приходится модифицировать. Эти отличия,
большинство из которых устранено в
стандарте SQL2, включают в себя:

- Коды ошибок.
В стандарте SQL-89 не
определены коды, которые возвращают
операторы SQL при возникновении ошибок, и в
каждой из коммерческих реализаций
используется собственный набор таких
кодов. В стандарте SQL2 определены
стандартные коды ошибок.
- Типы данных.
В стандарте SQL-89 определен
минимальный набор типов данных, однако в
нем отсутствуют некоторые из наиболее
распространенных и полезных типов,
например символьные строки переменной
длины, дата и время, а также денежные
единицы. В стандарте SQL2 упомянуты эти типы
данных, однако отсутствуют "новые"
типы данных, такие как графические и
мультимедийные объекты.
- Системные таблицы.
В стандарте SQL-89
умалчивается о системных таблицах, в
которых содержится информация о структуре
самой базы данных. Поэтому каждый
поставщик создавал собственные системные
таблицы, и их структура отличается даже в
четырех реализациях SQL компании IBM.
Системные таблицы стандартизированы в SQL2.
- Интерактивный SQL.
В стандарте
определен только программный SQL,
используемый прикладной программой, но не
интерактивный SQL. Например, оператор select,
предназначенный для выполнения запросов к
базе данных в интерактивном режиме, в
стандарте отсутствует.
- Программный интерфейс.
В первом
стандарте определен абстрактный способ
использования SQL в программах, написанных
на таких языках программирования, как COBOL,
FORTRAN и другие. Этот способ не используется
ни в одном коммерческом продукте, а в
существующих программных интерфейсах
имеются значительные отличия. В стандарте
SQL2 определен интерфейс встроенного SQL для
популярных языков программирования, но не
интерфейс вызова функций.
- Динамический SQL.
В стандарте SQL-89 не
описаны элементы SQL, необходимые для
разработки приложений общего назначения,
таких как генераторы отчетов и программы
создания и выполнения запросов. Однако эти
элементы, известные под названием динамический
SQL, имеются почти во всех СУБД и в
различных системах значительно
отличаются. В SQL2 входит стандарт
динамического SQL.
- Семантические отличия.
Поскольку
некоторые элементы определены в
стандартах как зависящие от реализации,
может возникнуть ситуация, когда в
результате выполнения одного и того же
запроса в двух совместимых СУБД будут
получены два различных набора результатов.
Отличия результатов обусловлены
различиями в обработке значений null,
разными агрегатными функциями и
несовпадением процедур удаления
повторяющихся строк.
- Последовательность сравнения.
В
стандарте SQL-89 не упоминаются
последовательности сравнения (сортировки)
символов, хранящихся в базе данных.
Результаты запроса с сортировкой будут
отличаться при выполнении этого запроса
на персональном компьютере (с кодировкой
ASCII) и на мэйнфрейме (с кодировкой EBCDIC).
Стандарт SQL2 позволяет программе или
пользователю указывать требуемую
последовательность сортировки.
- Структура базы данных. В стандарте
SQL-89 определен SQL, который используется
уже после того, как база данных была
открыта и подготовлена к работе. Детали
наименования баз данных и
первоначального подключения к ним сильно
отличаются и несовместимы. Стандарт SQL2 в
некоторой степени унифицирует этот
процесс, но не может полностью
ликвидировать все отличия.
Вопреки перечисленным различиям,
в начале 90-х годов стали появляться
коммерческие программы, реализующие
переносимость приложений между различными
СУБД, Однако в таких программах для каждой
из поддерживаемых СУБД требуется
специальный конвертер, который генерирует
код в соответствии с определенным
диалектом SQL, выполняет преобразование-
типов данных, транслирует коды ошибок и т.д.
"Прозрачная" переносимость между
различными СУБД, использующими SQL, является
основной целью стандарта SQL2 и протокола ODBC,
однако повсеместный, "прозрачный" и унифицированный
доступ к базам данных SQL остается делом
будущего.
Будучи стандартным языком
доступа к реляционной базе данных, SQL
оказывает большое влияние на все сегменты
компьютерного рынка. Компания IBM приняла SQL
в качестве унифицирующей технологии баз
данных для линии своих продуктов. Все
поставщики мини-компьютеров предлагают
реляционные базы данных; такие базы данных
доминируют и на рынке компьютерных систем,
работающих под управлением UNIX. По мере того
как отдельные персональные компьютеры
уступают дорогу сетям с архитектурой
клиент/сервер, SQL видоизменяет рынок баз
данных для персональных компьютеров. SQL
применяется даже при оперативной обработке
транзакций, опровергая бытовавшее ранее
мнение, что из-за низкого быстродействия
реляционные базы данных никогда не смогут
использоваться в приложениях для обработки
транзакций.
SQL играет ключевую роль в
качестве языка доступа к базам данных,
объединяющего многочисленные
несовместимые компьютерные семейства
компании IBM. Эта роль была отведена ему еще в
спецификации SAA (Systems Application Architecture —
архитектура прикладных систем) компании IBM
в 1987 году. Хотя главные цели SAA так и не были
достигнуты, объединяющая роль SQL со
временем стала еще важнее. Стратегическими
программными продуктами компании IBM,
предназначенными для работы с базами
данных, являются
- DB2. Флагманская реляционная СУБД,
являющаяся стандартом SQL для мэйнфреймов
компании IBM, работающих под управлением ОС
MVS.
- SQL/DS.
Реляционная СУБД для VM, другой ОС
мэйнфреймов компании IBM.
- SQL/400.
Эта реализация SQL для систем
среднего уровня поддерживает встроенную
реляционную базу данных компьютеров серии
AS/400.
- DB2/6000.
Эта реализация DB2 работает на
рабочих станциях и серверах семейства RS/6000,
работающих под управлением операционной
системы UNIX.
- DB2/2.
Эта реализация SQL для персональных
компьютеров компании IBM основана на
реализации DB2 для мэйнфреймов. Она заменила
OS/2 Extended Edition, которая была первой
реляционной СУБД компании IBM для
персональных компьютеров, и обеспечила
лучшую совместимость с DB2.
Сегмент рынка реляционных СУБД
для мини-компьютеров начал развиваться
одним из первых. Первые продукты компаний
Oracle и Ingres предназначались для мини-компьютеров
VAX/VMS компании Digital. С тех пор оба продукта
были перенесены на множество других
платформ. СУБД компании Sybase, появившаяся
позднее и предназначенная для оперативной
обработки транзакций, работала на
нескольких платформах, включая VAX.
Кроме того, поставщики мини-компьютеров
разрабатывали на основе SQL собственные
реляционные базы данных. Компания Digital на
каждую систему VAX/VMS устанавливала
собственную СУБД Rdb/VMS. Компания Hewlett-Packard
предложила Allbase, СУБД, поддерживающую как
собственный диалект HPSQL, так и
нереляционный интерфейс. Компания Data General
заменила свои старые нереляционные базы
данных на СУБД DG/SQL. К тому же многие из
поставщиков мини-компьютеров перепродают
реляционные СУБД независимых поставщиков.
SQL был однозначно признан лучшим
решением в области управления данными для
компьютерных систем на основе UNIX.
Операционная система UNIX, которая была
разработана в Bell Laboratories, в 80-х годах стала
завоевывать популярность в качестве
стандартной операционной системы. Она
работает на разнообразных компьютерных
системах, начиная от рабочих станций и
заканчивая мэйнфреймами, и стала
стандартной ОС для научных и инженерных
приложений. В начале 80-х уже были доступны
четыре большие СУБД для UNIX-систем. Две из
них, производства компаний Oracle и Ingres, были
UNIX-версиями продуктов для мини-компьютеров
компании DEC, Две другие СУБД, производства
компаний Informix и Unify, были созданы специально
для UNIX. Вначале ни одна из них не предлагала
поддержку SQL, но к 1985 году компании Unify и Informix
ввели эту поддержку в свои СУБД. На
сегодняшний день существуют версии СУБД
компаний Oracle, Sybase, Informix и Ingres для всех
ведущих систем на базе UNIX.
В процессе своего развития SQL и
реляционные базы данных почти не
применялись в приложениях, предназначенных
для оперативной обработки транзакций (OLTP —
On-Line Transaction Processing). Поскольку в реляционных
базах данных упор делается на запросы,
такие базы данных традиционно
использовались в приложениях, служащих для
поддержки принятия решений, и приложениях с
маленьким объемом транзакций, где их низкое
быстродействие не было недостатком. В
области оперативной обработки транзакций,
где требовалось обеспечить одновременный
доступ к данным сотням пользователей, и
время ожидания каждого из них не должно
было превышать доли секунды, доминировала
нереляционная СУБД IMS (Information Management System —
система управления информацией) компании IBM.
В 1986 году компания Sybase, новая на
рынке СУБД, представила реляционную базу
данных, предназначенную специально для
оперативной обработки транзакций. СУБД
компании Sybase работала на мини-компьютерах
VAX и рабочих станциях Sun и обеспечивала
уровень быстродействия, необходимый для
обработки больших объемов транзакций.
Вскоре вслед за нею компании Oracle Corporation и
Relational Technology объявили, что они также
выпустят версии своих продуктов Oracle и Ingres
для оперативной обработки транзакций. На
рынке UNIX-систем компания Informix анонсировала
OLTP-версию своей СУБД под названием Informix-Turbo.
В апреле 1988 года компания IBM
присоединилась к поставщикам реляционных
СУБД для OLTP, выпустив систему DB2 Version 2. Тесты
показали, что на больших мэйнфреймах эта
система могла обрабатывать до 250 транзакций
в секунду. Компания IBM утверждала, что
теперь быстродействие DB2 позволяет
использовать ее во всех OLTP-приложениях,
кроме наиболее требовательных к
быстродействию, и поощряла клиентов
использовать ее вместо IMS. После этого тесты
стали стандартным маркетинговым
инструментом для реляционных СУБД, вопреки
серьезным сомнениям в том, насколько они
отражают быстродействие реальных
приложений.
По мере развития реляционной
технологии и увеличения мощности
компьютеров роль SQL в оперативной обработке
транзакций также возрастает. Теперь для
оперативной обработки транзакций часто
используются реляционные базы данных,
быстродействие которых выросло на
несколько порядков.
С появлением первой модели IBM PC
базы данных стали приобретать популярность
на рынке персональных компьютеров. СУБД dBASE
компании Ashton-Tate была инсталлирована более
чем на миллионе PC, работавших под
управлением MS-DOS; другие продукты, такие как
R-BASE, PFS: File и Paradox, также достигли
значительного успеха. На компьютерах
семейства Macintosh такие СУБД, как 4th Dimension,
объединили в себе управление данными и
графический интерфейс пользователя. Хотя в
большинстве СУБД для персональных
компьютеров данные хранились в табличной
форме, эти СУБД не обладали полной мощью
реляционной базы данных и не поддерживали
SQL.
До конца 80-х SQL мало использовался
на персональных компьютерах. К тому времени
обычным явлением стали персональные
компьютеры, поддерживающие дисковые
устройства объемом в десятки и сотни
мегабайтов. Однако вскоре пользователи
начали объединять персональные компьютеры
в сети, и появилась необходимость в
совместном использовании данных. В
результате персональные компьютеры стали
нуждаться в возможностях, которые могли
обеспечить реляционные базы данных и SQL.
Первые СУБД для персональных
компьютеров представляли собой
соответствующим образом переработанные
версии известных СУБД для миникомпьютеров
и с трудом умещались на персональных
компьютерах. Система Professional Oracle,
анонсированная в 1984 году, требовала двух
мегабайтов памяти на IBM PC, a Oracle for Macintosh,
представленная в 1988 году, имела схожие
требования. Версия СУБД Ingres для PC,
выпущенная в 1984 году, едва удовлетворяла
ограничению MS-DOS на объем используемой
оперативной памяти (640 Кб). СУБД Informix-SQL для
MS-DOS была выпущена в 1986 году и представляла
собой версию популярной СУБД, работавшей
под управлением UNIX. В том же 1986 году
компания Gupta Technologies, основанная бывшим
менеджером из Oracle, выпустила SQLBase, СУБД для
локальных сетей, которая одной из первых
реализовала архитектуру клиент/сервер и
была прототипом нынешних СУБД для ЛВС.
С появлением в апреле 1987 года
операционной системы OS/2, созданной
компаниями Microsoft и IBM, начался рост
популярности SQL применительно к
персональным компьютерам. Кроме
стандартной версии OS/2, компания IBM
выпустила расширенную редакцию OS/2 (OS/2 Extended
Edition — OS/2 ЕЕ) со встроенной поддержкой
реляционных баз данных. Сделав SQL частью
операционной системы, компания IBM тем самым
вновь подтвердила свою приверженность ему.
Появление OS/2 ЕЕ стало проблемой
для компании Microsoft. Поскольку она была
разработчиком стандартной OS/2 и продавала
ее другим производителям персональных
компьютеров, потребовалась альтернатива OS/2
ЕЕ. Ответом Microsoft стала покупка лицензии на
СУБД компании Sybase, разработанной для VAX, и
перенос этой СУБД в систему OS/2.
В январе 1988 года Microsoft и Ashton-Tate
неожиданно объявили, что они будут
совместно продавать новую СУБД, получившую
название SQL Server. Компания Microsoft будет
продавать SQL Server вместе с OS/2 производителям
компьютеров, а компания Ashton-Tate будет
продавать SQL Server по розничным каналам
пользователям PC. В сентябре 1989 года
компания Lotus Development внесла свой вклад в SQL
Server, сделав инвестицию в компанию Sybase. Через
год с небольшим компания Ashton-Tate отказалась
от исключительных прав на распространение
и продала свою долю компании Lotus. Хотя успех
SQL Server для OS/2 был ограниченным,
она продолжает играть ключевую роль в
планах компании Microsoft. Эта СУБД является
реляционной базой данных для Windows NT,
флагманской операционной системы компании
Microsoft, предназначенной для работы в среде
клиент/сервер.
Появление OS/2 Extended Edition и SQL Server
привлекло внимание к потенциальным
возможностям SQL в локальных вычислительных
сетях. Заказчики стали всерьез
рассматривать архитектуру клиент/сервер в
качестве альтернативы центральному мини-компьютеру
или мэйнфрейму.
Вначале на рынке SQL для ЛВС в
качестве платформы для сервера баз данных
доминировала OS/2. В отличие от MS-DOS, у этой
операционной системы не было ограничения
на объем ОЗУ (640 Кб), а ее многозадачная
архитектура хорошо подходила для создания
сервера баз данных. К концу 1989 года компании
IBM, Microsoft, Oracle, Gupta и другие представили свои
СУБД для OS/2. Однако объемы продаж OS/2
оказались меньше ожидаемых, в то время как
объемы продаж Microsoft Windows 3.0 возросли. Вопреки
всем попыткам подчеркнуть их различия,
между OS/2 и Windows 3.0 возникла конкуренция,
которая постепенно привела к разрыву между
IBM и Microsoft. В конце концов компания Microsoft
признала свою приверженность Windows 3.0 и
отказалась от поддержки OS/2, оставив за нею
статус "собственности IBM". Хотя OS/2
продолжает занимать важное место в планах
компании IBM, ее шанс стать доминирующей
промышленной операционной системой для
персональных компьютеров — а значит, и
наиболее подходящей платформой для SQL в ЛВС
— упущен.
В то время как шла борьба между OS/2
и Windows, стали расти объемы продаж
реляционных баз данных для других сетевых
платформ. Цены на компьютеры, работающие
под управлением UNIX, постоянно снижались, а
версия UNIX от компании Santa Cruz Operation (SCO UNIX)
стала наиболее популярной платформой для
персональных компьютеров на базе
процессоров Intel. В начале 90-х годов SCO UNIX
могла поддерживать несколько процессоров,
что позволило делить загрузку компьютера
между двумя, тремя или более
микропроцессорами. Имея в своем
распоряжении вычислительную мощь четырех-восьми
процессоров, работающих параллельно, СУБД
Oracle, Informix и Sybase смогли достичь
быстродействия мини-компьютеров на
серверах семейства PC стоимостью от $20000. На
сегодняшний день многопроцессорные
серверы от компаний Compaq, Dell, IBM и других
поставщиков персональных компьютеров
имеют наилучшее соотношение цена/производительность
среди всех доступных на рынке компьютерных
систем.
Хотя UNIX стала популярной
платформой для серверов баз данных,
подавляющее большинство серверов ЛВС все
еще применяются только для совместного
использования файлов и принтеров, и
большинство этих серверов работают под
управлением Novell Netware. Серверная
операционная система Novell Netware реализует
меньшие возможности, чем UNIX или OS/2, но у нее
есть одно большое преимущество — объем
продаж. Первые реляционные базы данных для
Netware котировались хуже, чем СУБД для UNIX и OS/2,
однако начиная с 1992 года все ведущие
поставщики баз данных представили версии
своих продуктов для Netware. Объемы Продаж этих
продуктов стали быстро расти, и Netware
оказалась жизнеспособной платформой для
серверов баз данных.
В противоборстве с UNIX, OS/2 и Netware
компания Microsoft сделала упор на Windows NT, клиент/серверную
платформу для ЛВС, У Windows NT есть ряд
значительных преимуществ над конкурентами;
это новая операционная система, не
отягощенная "обратной совместимостью".
Учитывая вес компании Microsoft на компьютерном
рынке, большинство аналитиков полагает, что
NT завоюет лидирующее положение в области
сетей с архитектурой клиент/сервер. В
результате все поставщики СУБД в настоящее
время выпускают версии своих продуктов для
работы под управлением Windows NT.
Сегодня рынок СУБД для сетей с
архитектурой клиент/сервер является
наиболее быстро растущим сегментом рынка
серверов ЛВС.