Основные идеи современной информационной технологии базируются на концепции, согласно которой данные должны быть организованы в базы данных (БД) с целью адекватного отображения изменяющегося реального мира и удовлетворения информационных потребностей пользователей. Эти БД создаются и функционируют под управлением специальных программных комплексов, называемых системами управления базами данных (СУБД).
Увеличение объема и структурной сложности хранимых данных, расширение круга пользователей информационных систем привели к широкому распространению наиболее удобных и сравнительно простых для понимания реляционных БД. Для обеспечения одновременного доступа к данным множества пользователей, нередко расположенных достаточно далеко друг от друга и от места хранения баз данных, созданы сетевые версии СУБД. В них тем или иным путем решаются специфические проблемы параллельных процессов, целостности (правильности) и безопасности данных, а также санкционирования доступа.
Ясно, что совместная работа пользователей в сетях с помощью унифицированных средств общения с базами данных возможна только при наличии стандартного языка манипулирования данными, обладающего средствами для реализации перечисленных выше возможностей. Таким языком стал SQL, разработанный в 1974 году фирмой IBM для экспериментальной реляционной СУБД System R.
Язык SQL является инструментом, предназначенным для выборки и обработки информации, содержащейся в компьютерной базе данных. SQL — это сокращенное название структурированного языка запросов (Structured Query Language). По историческим причинам аббревиатура SQL читается обычно как «сиквел», но используется и альтернативное произношение «эскюэль». Как следует из названия, SQL является языком программирования, который применяется для организации взаимодействия пользователя с базой данных. На самом деле SQL работает только с базами данных одного определенного типа, называемых реляционными. На рис. 1.1 изображена схема работы SQL. Согласно этой схеме, в вычислительной системе имеется база данных, в которой хранится информация. Компьютерная программа, которая управляет базой данных, называется системой управления базой данных (СУБД). Если пользователю необходимо получить информацию из БД, он запрашивает её у СУБД c помощью команды SQL. СУБД обрабатывает запрос, находит требуемые данные и посылает их пользователю. Процесс запрашивания данных и получения результата называется запросом к базе данных; отсюда и название «структурированный язык запросов».
База данных
Система управления базой данных
(СУБД)
SQL-запрос:
Select * from R1
Данные:
ID FIO
1 Иванов И. И.
Рис.1.1 Применение SQL для доступа к базе данных
Однако название SQL не совсем соответствует действительности. Во-первых, сегодня SQL представляет собой нечто большее, чем просто инструмент создания запросов. Сейчас этот язык используется для реализации всех функциональных возможностей, которые СУБД предоставляет пользователю. К ним относятся:
Ø Организация данных. SQL дает пользователю возможность изменять структуру представления данных, а также устанавливать отношения между элементами БД.
Ø Выборка данных. SQL дает пользователю возможность изменять БД, т.е. добавлять в неё новые данные, а также удалять или обновлять уже имеющиеся в ней данные.
Ø Управление доступом. С помощью SQL можно ограничить возможности пользователя по выборке и изменению данных и защитить их от несанкционированного доступа.
Ø Совместное использование данных. SQL координирует совместное использование данных пользователям, работающим параллельно, чтобы они не мешали друг другу.
Ø Целостность данных. SQL позволяет обеспечить целостность БД, защищая её от разрушения из-за несогласованных изменений или отказа системы.
Таким образом, SQL является достаточно мощным языком, обеспечивающим эффективное взаимодействие с СУБД.
Во-вторых, SQL – это не полноценный компьютерный язык типа С++ или Java. В нем нет инструкций для проверки условий, организации циклов. SQL является подъязыком БД, в который входит около сорока инструкций, предназначенных для управления БД. Инструкции SQL встраиваются в базовый язык, например С++, и дают возможность получать доступ к БД. Кроме того, из такого языка как С++ инструкции SQL можно посылать в СУБД, используя интерфейс вызова функций.
Наконец, SQL – это слабоструктурированный язык. Инструкции SQL напоминают английские предложения и содержат «слова-пустышки», не влияющие на смысл инструкции, но облегчающие её чтение. В SQL почти нет нелогичностей, и к тому же имеется ряд специальных правил, предотвращающих создание инструкций, которые выглядят как абсолютно правильные, но не имеют смысла.
SQL на сегодняшний день является единственным стандартным языком для работы с реляционными БД. Сам по себе SQL не является ни системой управления базами данных, ни отдельным программным продуктом. SQL – это неотъемлемая часть СУБД, с помощью которой осуществляется связь пользователя с ней.
Достоинства SQL.
SQL – это легкий для понимания язык и в тоже время универсальное программное средство управления данными. Успех языку SQL принесли следующие его особенности:
1. независимость от конкретной СУБД;
2. межплатформенная переносимость;
3. наличие стандартов;
4. реляционная основа;
5. поддержка со стороны компаний IBM(СУБД DB2) и Microsoft (протокол OBDC и технология ADO);
6. возможность выполнения специальных интерактивных запросов;
7. поддержка архитектуры клиент/сервер;
8. возможность различного представления данных;
9. интеграция с языками высокого уровня;
10. расширяемость и поддержка объектно-ориентированных технологий.
Недостатки SQL
1. Несоответствие реляционной модели данных
Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие проблемы SQL:
повторяющиеся строки;
неопределённые значения (NULL);
явное указание порядка колонок слева направо;
колонки без имени и дублирующиеся имена колонок;
отсутствие поддержки свойства «=»;
использование указателей;
высокая избыточность.
2. Сложность
Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов, он стал настолько сложным, что превратился в инструмент программиста.
3. Отступления от стандартов
Несмотря на наличие международного стандарта SQL, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
4. Сложность работы с иерархическими структурами
Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, Oracle использует выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2005. В версии MS SQL Server 2008 появился новый тип данных — hierarchyid, упрощающий манипуляцию древовидными структурами.