Первые компьютерные базы данных появились в конце 1960-х годов. В то время это была важная область исследований. Многие ученые-компьютерщики сосредоточились на совершенствовании работы баз данных. Одним из них был Эдгар Фрэнк (Тед) Кодд, английский ученый-компьютерщик, работавший в компании IBM. Еще в 1940-х годах он участвовал в проекте Selective Sequence Electronic Calculator — первом в мире электромеханическом компьютере
Но по-настоящему Кодд прославился благодаря опубликованной в 1970 году статье «Реляционная модель данных для больших общих банков данных», которая положила начало эре реляционных баз данных в информатике. Поэтому Кодда часто называют праотцом SQL. В 1981 году он получил премию Тьюринга — высшую награду в области компьютерных наук, которую иногда называют «Нобелевской премией по вычислительной технике».
В то время, когда Кодд написал свою статью, преобладали иерархические и сетевые базы данных. Они также были довольно негибкими. Чтобы получить данные из базы данных, нужно было, по сути, написать компьютерную программу: данные были недоступны для непрограммистов. Любое изменение в модели требовало изменения схем доступа к данным — другими словами, программы доступа к данным приходилось переписывать.
В своей статье Кодд предложил совершенно новую идею: моделирование данных с помощью математического понятия отношений. (Сегодня мы называем их таблицами). Реляционная модель данных Кодда обеспечивала большую гибкость, чем иерархические и сетевые модели данных. Новые отношения можно было добавлять без изменения существующих отношений. Благодаря его идеям работать с базами данных стало намного проще.
Система R
Модель Кодда не сразу стала успешной. Компания IBM не стремилась реализовать его предложения. В то время у них была IMS, очень успешная иерархическая база данных. Они не хотели подрывать свои доходы от IMS созданием конкурирующего продукта. (IMS разрабатывается и сегодня, что показывает, насколько успешной она была.) Только в 1973 году IBM начала System R, исследовательский проект по изучению идей Кодда о реляционной модели данных. Кодд не работал в тесном контакте с командой System R; трудно понять, почему его выдернули из проекта, основанного на его собственной работе. Два человека, участвовавших в разработке System R, Дон Чемберлин и Рэй Бойс, отвечали за создание языка запросов.
Язык запросов для реляционных баз данных
В своей основополагающей статье Кодд предложил набор операций, которые можно использовать для извлечения данных из отношений. Эти операции можно считать первым языком запросов для реляционных баз данных. Конечно, синтаксис был совершенно не похож на тот SQL, который мы знаем сегодня; Кодд использовал для этого языка математические обозначения. Большинство операций, предложенных Коддом, могут быть выполнены в современном SQL, просто с другой нотацией.
В то время Дон Чемберлин работал над иерархическими базами данных и изучал язык запросов к этим базам данных. Он сразу же понял влияние модели данных Кодда. В 1995 году он вспоминал:
«Для нас с Рэем знакомство с реляционной моделью данных на научном симпозиуме Кодда стало откровением. Впервые мы увидели, как запрос, для которого потребовалась бы сложная программа на языке DBTG, можно свести к нескольким простым строкам с помощью одного из реляционных языков Кодда. Для нас двоих это стало игрой — придумывать запросы и соревноваться друг с другом в их выражении на различных языках запросов.»
На самом деле Кодд предложил два разных языка для реляционной модели: реляционную алгебру (основа этого языка была в его оригинальной статье 1970 года) и реляционное исчисление (также известное как язык Alpha). Оба эти языка использовали математическую нотацию с квантификаторами и различными математическими операторами. Идеи из реляционной алгебры Кодда можно увидеть в SQL и сегодня.
Ирв Трейгер, который также работал в IBM в это время, добавил:
«Гленн Бэкон, возглавлявший отдел систем, удивлялся, как Тед мог обосновать, что все смогут писать на этом языке, основанном на математическом исчислении предикатов, с универсальными квантификаторами, экзистенциальными квантификаторами, переменными и очень, очень сложными вещами».
Реляционное исчисление/альфа стало основой для QUEL, языка запросов для Ingres (Interactive Graphics Retrieval System), ранней реляционной базы данных, разработанной Майклом Стоунбрейкером в Калифорнийском университете в Беркли. Ingres развилась во многие коммерческие приложения баз данных, такие как PostgreSQL.
Игра с запросами
Еще до начала проекта System R Чемберлин и Бойс придумали язык, который они назвали SQUARE (Specifying Queries as Relational Expressions). Они оценили мощь идей Кодда, которые позволяли с помощью нескольких строк выражать сложные запросы, которые в иерархической базе данных заняли бы страницы. Однако они были убеждены, что их язык проще и доступнее для обычных пользователей, чем реляционная алгебра и реляционное исчисление Кодда.
«Рэй и я были впечатлены тем, насколько компактно языки Кодда могли представлять сложные запросы. Однако в то же время мы считали, что можно разработать реляционный язык, который будет более доступен для пользователей без формальной подготовки в области математики или компьютерного программирования.»
SQUARE стал основой для нового языка запросов System R. В SQUARE использовалось много подстрочных символов и некоторые математические обозначения. Его было трудно набирать на клавиатуре. Чемберлин и Бойс решили адаптировать его так, чтобы он напоминал структуру английского предложения и был более удобен для набора.
«Поэтому мы начали говорить, что адаптируем идеи SQUARE к более английским ключевым словам, которые легче набирать, потому что они были основаны на английских структурах. Мы назвали его Structured English Query Language и использовали для него акроним SEQUEL.»
При разработке SEQUEL для Чемберлина и Бойса были важны две вещи. Во-первых, они хотели, чтобы он был доступен для обычных пользователей, не имеющих математического или программистского образования. Сотрудники System R даже наняли группу студентов, чтобы те изучили SEQUEL и проверили, насколько простым им покажется синтаксис. Кроме того, они хотели, чтобы язык содержал элементы модификации данных и определения данных, что в то время было чем-то очень новым.
«Мы с Рэем надеялись разработать реляционный язык, основанный на концепциях, которые были бы знакомы более широкому кругу пользователей. Мы также надеялись расширить язык, чтобы он включал обновления базы данных и административные задачи, такие как создание новых таблиц и представлений, которые традиционно выходили за рамки языка запросов.
Мы думали, что делаем то, что позволяет непрограммистам взаимодействовать с базами данных. Мы думали, что это откроет доступ к данным для совершенно нового класса людей, которые смогут делать вещи, которые раньше были невозможны, потому что они не умели программировать.»
Наконец, Чемберлин и Бойс написали две статьи о SEQUEL: одну о DML (Data Manipulation Language, например, SELECT, INSERT и UPDATE statements) и одну о DDL (Data Definition Language, который используется для создания и изменения структуры базы данных).
«Мы написали две работы: одну по SEQUEL/DML и одну по SEQUEL/DDL. Мы очень тесно сотрудничали в этом направлении. Авторами статьи по DML были Чемберлин и Бойс; авторами статьи по DDL были Бойс и Чемберлин, без особой причины; мы просто разделили их. В тот год мы хотели поехать в Стокгольм, потому что это был год проведения Конгресса IFIP в Стокгольме. У меня был билет в Стокгольм из-за работы в Йорктауне, поэтому Рэй подал доклад по DDL на конгресс IFIP в Стокгольме, а доклад по DML мы подали в SIGMOD. […] Это были работы-близнецы по нашей первоначальной оценке. Мы написали их вместе и думали, что они имеют сопоставимую ценность и влияние. Но произошло совсем другое. Статья DDL была отклонена на конгрессе IFIP; Рэй не поехал в Стокгольм».
Так родился SEQUEL. Позже SEQUEL был переименован в SQL из-за проблемы с торговой маркой.
К сожалению, Рэй Бойс скончался вскоре после того, как заложил основы SQL; он так и не увидел, какое влияние это окажет. В 1974 году, примерно через месяц после представления статьи о SEQUEL на технической конференции в Анн-Арборе, штат Мичиган, он внезапно умер от разрыва аневризмы головного мозга. Ему было всего 26 лет.
Интересно, что Дональд Чемберлин не считал SQL хорошим языком для того, как он использовался в то время. В 1995 году он сказал:
«Когда мы с Рэем разрабатывали Sequel в 1974 году, мы думали, что язык будет использоваться в основном для специальных запросов плановиков и других специалистов, чья сфера компетенции не связана с управлением базами данных. Мы хотели, чтобы язык был достаточно простым, чтобы обычные люди могли «подойти и использовать его» с минимальным обучением. За прошедшие годы я с удивлением заметил, что SQL чаще используется подготовленными специалистами по базам данных для выполнения повторяющихся операций, таких как банковские депозиты, покупки по кредитным картам и онлайн-аукционы. Мне приятно видеть, что язык используется в различных средах, хотя он оказался не таким доступным для неподготовленных пользователей, как мы с Рэем изначально надеялись.»
SQL становится отраслевым стандартом
За прошедшие годы SQL стал отраслевым стандартом. На данный момент достаточно сказать, что SQL стал основным языком для работы с базами данных. Он признан всеми важными организациями, а такие гиганты рынка, как Google и Facebook, используют его ежедневно для многих процессов.
В настоящее время SQL и базы данных являются одной из самых быстрорастущих отраслей ИТ-индустрии. Следование этой тенденции может принести свои плоды. Если вы хотите начать изучение SQL с нуля, попробуйте наш курс «Основы SQL». Если вы уже знаете немного SQL и хотите научиться лучше анализировать поведение ваших клиентов или тенденции доходов, я рекомендую курс «SQL Reporting». А если вы знаете SQL и застряли на конкретной проблеме, загляните в нашу Поваренную книгу SQL, которая содержит множество готовых SQL-скриптов. Не стесняйтесь копировать их в свой проект.