4.4.1. Стандарты языка SQL и конкретные
реализации
Первая версия языка SQL появилась в середине 70-х
гг., которая была разработана в рамках проекта экспериментальной
реляционной СУБД System R. Исходное название языка сиквел - SEQUEL (Strurtered
English QUEry Language) только частично отражает суть этого языка.
Конечно, язык был ориентирован главным образом на удобную и понятную
пользователям формулировку запросов к реляционной БД. Но на самом
деле он уже являлся полным языком БД, содержащим, помимо операторов
формулирования запросов и манипулирования данными, средства
определения и манипулирования схемой БД; определения ограничений
це¬лостности и триггеров; возможности определения структур
физического уровня, поддерживающих эффективное выполнение запросов;
средства авторизации доступа к отношениям и их полям; средства
определения точек сохранения транзакции и откатов.
Существенными свойствами SQL являются возможность простого
формулирования запросов с соединениями нескольких отношений.
Особенностью SQL является возможность указания в запросе потребности
группирования отношения-результата по указанным полям с поддержкой
условий выборки на всю группу целиком. Такие условия выборки могут
содержать агрегатные функции, вычисляемые на группе. Эта возможность
SQL отличает этот язык от языков реляционной алгебры и реляционного
исчисления, не содержащих аналогичных средств. Еще одним отличием
SQL является необязательное удаление кортежей-дубликатов в
окончательном или промежуточных отношениях-результатах. Строго
говоря, результатом оператора выборки в языке SQL является не
отношение, а набор кортежей. В тех случаях, когда семантика запроса
требует наличия отношения, уничто¬жение дубликатов производится
неявно.
Операторы манипулирования данными UPDATE и DELETE построены на тех
же принципах, что и оператор выборки данных SELECT. Набор кортежей
указанного отношения, подлежащих модификации или удалению,
определяется входящим в соответствующий оператор логическим
выражением.
В число операторов определения схемы БД SQL System R входили
операторы создания и уничтожения постоянных и временных хранимых
отношений (CREATE TABLE и DROP TABLE) и создания и уничтожения
представляемых отношений (CREATE VIEW и DROP VIEW). Оператор
манипулирования схемой БД ALTER TABLE позволял добавлять указываемые
поля к существующим отношениям.
Язык SQL System R включал очень мощные средства контроля и
поддержа¬ния целостности БД. Средства контроля базировались на
аппарате ограничений целостности (ASSERTIONS). Фактически,
ограничение целостности - это логическое выражение, вычисляемое над
текущим состоянием БД, ложность которого соответствует нецелостному
состоянию БД. Логическое выражение ограничения целостности могло
содержать любой допустимый в языке предикат.
Очень важным механизмом, определенным в языке SQL System R, является
механизм триггеров. Этот механизм рассматривался главным образом как
средство автоматического поддержания целостности БД. При определении
триггера указывалось условие проверки его применимости (имя
отношения и тип операции манипулирования данными), условие
применимости триггера (логическое выражение, построенное по правилам,
близким к правилам для ограничений целостности первого класса) и
действие, которое должно быть выполнено над БД в случае истинности
условия применимости. Такое действие могло быть выражено с помо¬щью
произвольного оператора манипулирования данными. Во время выполнения
действия могли срабатывать другие триггеры, которые могли приводить
к срабатыванию еще каких-нибудь триггеров и т.д.
Существенной особенностью языка SQL, заложенной в нем с самого
начала, является обеспечение защиты доступа к данным средствами
самого языка. Основная идея такого подхода состоит в том, что
применительно к любому отношению БД и любому атрибуту отношения
вводится предопределенный набор привиле¬гий. С каждой транзакцией
неявно связывается идентификатор пользователя, от имени которого она
выполняется (способы связи и идентификации пользователей не
фиксируются в языке и определяются в реализации).
В настоящее время SQL реализован практически во всех коммерческих
реляционных СУБД, все фирмы провозглашают соответствие своей
реализации стандарту SQL, и на самом деле реализованные диалекты SQL
очень близки. Это произошло не сразу и не просто.
Наиболее близкими к System R являлись две системы фирмы IBM: SQL/DS
и DB2. Как кажется, обе эти системы прямо использовали реализацию
System R. Отсюда предельная близость реализованных диалектов SQL к
SQL System R. Из SQL System R были удалены только те части, которые
были недостаточно прора¬ботаны (например, точки сохранения) или
реализация которых вызывала слишком большие технические трудности (например,
ограничения целостности и триггеры). Можно назвать этот путь к
коммерческой реализации SQL движением сверху вниз.
|