Дадим сначала небольшую историческую справку.
Язык SQL, предназначенный для взаимодействия с базами
данных, появился в середине 1970-х гг. (первые публикации датируются
1974 г.) и был разработан в компании IBM в рамках проекта
экспериментальной реляционной системы управления базами данных. Исходное
название языка – SEQUEL (Structured English Query Language) – только
частично отражало суть этого языка. Первоначально, сразу после его
изобретения и в первичный период эксплуатации языка SQL, его название
являлось аббревиатурой от словосочетания Structured Query Language, что
переводится как «Язык структурированных запросов». Конечно, язык был
ориентирован главным образом на удобную и понятную пользователям
формулировку запросов к реляционным базам данных. Но, в
действительности, он почти с самого начала являлся полным языком баз
данных, обеспечивающим, помимо средств формулирования запросов и
манипулирования базами данных, следующие возможности:
1) средства определения и манипулирования схемой базы данных;
2) средства определения ограничений целостности и триггеров (о которых будет упомянуто позднее);
3) средства определения представлений баз данных;
4) средства определения структур физического уровня, поддерживающих эффективное выполнение запросов;
5) средства авторизации доступа к отношениям и их полям.
В языке отсутствовали средства явной синхронизации
доступа к объектам баз данных со стороны параллельно выполняемых
транзакций: с самого начала предполагалось, что необходимую
синхронизацию неявно выполняет система управления базами данных.
В настоящее время SQL – это уже не аббревиатура, а название самостоятельного языка.
Также в настоящее время язык структурированных запросов
реализован во всех коммерческих реляционных системах управления базами
данных и почти во всех СУБД, которые изначально основывались не на
реляционном подходе. Все компании-производители провозглашают
соответствие своей реализации стандарту SQL, и на самом деле
реализованные диалекты языка структурированных запросов очень близки.
Этого удалось добиться не сразу.
Особенностью большинства современных коммерческих систем
управления базами данных, затрудняющей сравнение существующих диалектов
SQL, является отсутствие единообразного описания языка. Обычно описание
разбросано по разным руководствам и перемешано с описанием
специфических для данной системы языковых средств, не имеющих прямого
отношения к языку структурированных запросов. Тем не менее можно
сказать, что базовый набор операторов SQL, включающий операторы
определения схемы баз данных, выборки и манипулирования данными,
авторизации доступа к данным, поддержки встраивания SQL в языки
программирования и операторы динамического SQL, в коммерческих
реализациях устоялся и более или менее соответствует стандарту.
С течением времени и работы над языком структурированных
запросов удалось достигнуть стандарта четкой стандартизации синтаксиса и
семантики операторов выборки данных, манипулирования данными и фиксации
средств ограничения целостности баз данных. Были специфицированы
средства определения первичного и внешних ключей отношений и так
называемых проверочных ограничений целостности, которые представляют
собой подмножество немедленно проверяемых ограничений целостности SQL.
Средства определения внешних ключей позволяют легко формулировать
требования так называемой ссылочной целостности баз данных (о которой мы
поговорим позднее). Это распространенное в реляционных базах данных
требование можно было сформулировать и на основе общего механизма
ограничений целостности SQL, но формулировка на основе понятия внешнего
ключа более проста и понятна.
Итак, с учетом всего этого в настоящее время язык
структурированных запросов – это название не просто одного языка, а
название целого класса языков, поскольку, несмотря на имеющиеся
стандарты, в различных системах управления базами данных реализуются
различные диалекты языка структурированных запросов, имеющие,
разумеется, одну общую основу.
|