История и стандарты

К.и.н., доцент В.Н. Завражин

К.и.н., асс. И.В. Волошинова

К.и.н., доц. Ф.Л. Севастьянов

К.и.н., доц. Л.Т. Позина

Д.и.н., проф. В.Г. Афанасьев

 

 

Эксперт:

 

 

Первая версия SQL была предложена в 1973 году фирмой IBM под названием Sequel. В 1980 году этой же фирмой язык был воплощен уже под нынешним названием в проекте System R по построению прототипа реляционной СУБД (неформальную персонализированную историю и обсуждение последствий создания см. на http://www.citforum.ru/database/digest/sql1.shtml). Успех System R дал начало многочисленным попыткам разных фирм воспроизвести эту систему, а вместе с ней SQL. Первый коммерческий результат такой деятельности принадлежит нынешней фирме Oracle. (Формулировки некоторых команд SQL в Oracle до сих пор напоминают о System R фирмы IBM.)

Для борьбы с несовместимостью воплощений SQL в разных системах язык вскоре оказался вовлечен в активную деятельность по стандартизации, проводившуюся разными организациями в разное время: в том числе X/Open Group, SQL Access Group, FIPS, Госстандарт РФ. Сейчас действуют два комитета по стандартизации SQL: ANSI (в США) и ISO (международный), работающие синхронно.

Основные вехи стандартизации перечислены ниже.

· SQL-86 (1986/1987 гг.);

· SQL-89 (1989 г.; фактически SQL-86 с малыми добавками);

· SQL-92 (синонимы: SQL2, SQL92; 1992 г.):

o Вводный уровень (Entry Level),

o Переходный уровень (Transitional Level),

o Промежуточный уровень (Intermediate Level),

o Полный уровень (Full Compliance);

· SQL:1999 (синонимы: SQL3, SQL-95, SQL1999, SQL-99, SQL99; главные дополнения — объектные возможности языка, хранимые процедуры):

o Основной уровень (Core),

o Расширенный уровень (Optional);

· SQL:2003 (пример дополнений — возможности XML). С этого момента очередные версии стандарта выходят не в полном объеме, как прежде, а в виде "дополнительных частей";

· SQL:2006 (развивает расширения, касающиеся XML, возникшие в SQL:2003);

· SQL:2008 (ряд частных дополнений, как, например, TRUNCATE TABLE или выдача первых N записей).

На основе SQL-92 построен ГОСТ Р ИСО/МЭК 9075-93.

Максимально достигнутый промышленными поставщиками уровень соответствия стандарту в настоящее время — Core SQL:2008, да и то с отклонениями. Он является продолжением (с расширениями и поправками) Core SQL:1999, а тот — продолжением Entry Level SQL-92.

Исторически SQL — не единственный предлагавшийся язык доступа к БД, а по мнению некоторых специалистов — и не лучший. Стандартизация SQL — одна из причин, по которой именно он получил широкое признание. Теоретически стандартизация обеспечивает независимость прикладных программ от типа используемой СУБД. Практически же каждый разработчик СУБД, включая фирму Oracle, предлагает не чисто стандартную реализацию, а собственный диалект SQL.

Противоречивость процессов стандартизации состоит в том, что коммерческие фирмы-разработчики склонны в первую очередь к собственным решениям, и только во вторую заинтересованы в общих; потребители же в первую очередь заинтересованы в общих решениях, и только во вторую — в частных. Росту диалектов способствует отсутствие в стандартах SQL однозначных предложений для некоторых свойств, например:

· выдача даты и времени суток,

· порождение значений для искусственных ключей,

· семантика некоторых типов данных.

Далее по тексту ссылки на "стандарт SQL" и "стандарт ANSI/ISO" относятся фактически к стандартам SQL:20xx. Ссылки на SQL-92, SQL:1999 и SQL:2003/8 уточняют время появления упоминаемого свойства стандарта SQL:20xx последней версии.

Исходное название — Sequel — происходит как сокращение от Structured English Query Language (так что некоторые ветераны программирования по сию пору произносят SQL как "сиквел"). Слово english в полном названии неслучайно: нынешний SQL замысливался в виде такого подмножества естественного языка, на котором потребитель данных мог бы обращаться к БД. Со временем метаморфоза произошла с "потребителем". Раньше полагали, что им будет конечный пользователь, а в наше время им оказался программист. Теперешний конечный пользователь как правило ничего не знает о SQL, работая с БД средствами графики или более высокого (по крайней мере архитектурно) уровня, построенными с помощью SQL, но уже программистом. Тем не менее, как и раньше, многие предложения на SQL действительно напоминают обычные человеческие высказывания. В этом таится большая опасность для программиста, так как на деле SQL — формальный язык (хоть и не самый сложный), который от человеческого отделяет пропасть. Выписывая предложение на SQL, программист нередко подсознательно пытается осмыслить написанное по-человечески, что иногда не страшно, но чаще совершенно искажает совершаемое СУБД на деле. Можно привести массу примеров, когда по-человечески воспринимаемая запись на SQL в действительности означает совсем иное. Заложенная когда-то в Sequel близость к формулировкам на английском языке вынуждает сегодняшнего программиста на SQL все время быть начеку. Показательно, что в расшифровке SQL (Structured Query Language) слово English выпало, но инерция развития языка сохраняется.