SQL (Structured Query Language) - один из самых устойчивых и долгоживущих языков в истории IT. Несмотря на десятилетия развития технологий, появления новых парадигм и модных решений, SQL остаётся основным инструментом работы с данными. Чтобы лучше понимать, почему SQL выглядит именно так, полезно разобраться в его истории - от академических идей до промышленных стандартов.


Реляционная модель: начало всего (1970)

История SQL начинается не с самого языка, а с реляционной модели данных.

В 1970 году сотрудник IBM Эдгар Ф. Кодд (Edgar F. Codd) опубликовал научную статью:

"A Relational Model of Data for Large Shared Data Banks"

В ней он предложил революционную на тот момент идею:

  • данные должны храниться в таблицах (relations);
  • строки - это кортежи (tuples);
  • столбцы - атрибуты;
  • доступ к данным осуществляется декларативно, а не через навигацию.

До этого БД были:

  • иерархическими;
  • сетевыми;
  • жёстко связанными с физической структурой хранения.

Реляционная модель позволила отделить логику данных от способа их хранения, что стало фундаментом SQL.


SEQUEL: первый шаг к SQL (1973 - 1974)

После публикации идей Кодда в IBM начался исследовательский проект System R. Его целью было доказать, что реляционная модель может быть реализована на практике.

Для работы с данными был создан язык:

SEQUEL (Structured English QUEry Language)

Авторы:

  • Дональд Чемберлин (Donald D. Chamberlin)
  • Рэймонд Бойс (Raymond F. Boyce)

Основные идеи SEQUEL:

  • язык должен быть похож на английский;
  • пользователь описывает что он хочет получить, а не как;
  • запросы должны быть короткими и читаемыми.

Пример раннего SEQUEL:

SELECT name FROM employee WHERE department = 'Sales';

Очень знакомо, правда?

- Почему SQL, а не SEQUEL?

Название SEQUEL пришлось изменить по юридическим причинам - оно конфликтовало с торговой маркой одной из компаний.

Так язык стал называться SQL.


Первые коммерческие СУБД (конец 1970-х - 1980-е)

Хотя IBM разработала SQL, первыми коммерческий успех получили не они.

- Oracle (1979)

Компания Relational Software Inc. (позже Oracle) выпустила:

  • Oracle V2 - первую коммерческую реляционную СУБД с SQL.

Oracle сделал ставку на:

  • переносимость;
  • работу на разных платформах;
  • практичность, а не академическую строгость.

- Другие игроки

В 1980-х появились:

  • IBM DB2
  • Ingres
  • Sybase
  • Informix

Каждая система имела свой диалект SQL, что быстро стало проблемой.


Стандартизация SQL (ANSI / ISO)

Чтобы остановить хаос диалектов, был создан стандарт.

Ключевые этапы:

  • SQL-86 - первый стандарт ANSI
  • SQL-89 - уточнения
  • SQL-92 - большой и важный стандарт (до сих пор основа)
  • SQL:1999 - CTE, рекурсия, триггеры
  • SQL:2003 - оконные функции
  • SQL:2011 - temporal tables
  • SQL:2016 - JSON

На практике:

  • ни одна СУБД не реализует стандарт полностью;
  • каждая выбирает нужные части;
  • добавляет собственные расширения.

Эволюция SQL: от запросов к платформе

Со временем SQL перестал быть просто языком SELECT.

Появились:

  • DDL - CREATE, ALTER, DROP
  • DML - INSERT, UPDATE, DELETE
  • DCL - GRANT, REVOKE
  • TCL - COMMIT, ROLLBACK
  • представления (VIEW)
  • индексы
  • триггеры
  • хранимые процедуры

SQL стал полноценным языком управления данными.


PostgreSQL и академическое наследие

Отдельного внимания заслуживает PostgreSQL.

Его корни:

  • проект Ingres (Калифорнийский университет в Беркли);
  • ориентация на стандарты;
  • расширяемость;
  • строгую типизацию.

PostgreSQL часто называют "самой академически правильной реализацией SQL"

Именно поэтому он:

  • быстро внедряет новые части стандарта;
  • поддерживает сложные запросы;
  • популярен в системах с высокими требованиями к данным.

SQL vs NoSQL: вызов 2010-х

В 2010-х годах появились NoSQL-решения:

  • MongoDB
  • Cassandra
  • Redis

Они критиковали SQL за:

  • жёсткую схему;
  • сложность масштабирования;
  • избыточность.

Но произошло неожиданное:

  • SQL не исчез;
  • NoSQL добавили SQL-подобные запросы;
  • появились NewSQL и distributed SQL.

Сегодня SQL работает:

  • в облаках;
  • в распределённых системах;
  • поверх петабайт данных.

Source: Orkhan Alishov's notes