
Недостатки Несоответствие реляционной модели данных
Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности они указывают на следующие проблемы SQL[3]:
Повторяющиеся строки
Неопределённые значения (nulls)
Явное указание порядка колонок слева направо
Колонки без имени и дублирующиеся имена колонок
Отсутствие поддержки свойства «=»
Использование указателей
Высокая избыточность
В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифесте[4] они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.
Сложность
Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.
Отступления от стандартов
Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
Сложность работы с иерархическими структурами
Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения. Например, Oracle использует выражение CONNECT BY. В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2008.[источник не указан 16 дней]
Расширения
Процедурные расширения
Поскольку SQL не является языком программирования (то есть не предоставляет средств для автоматизации операций с данными), вводимые разными производителями расширения касались в первую очередь процедурных расширений. Это хранимые процедуры (англ. stored procedures) и процедурные языки-«надстройки». Практически в каждой СУБД применяется свой процедурный язык. Стандарт для процедурных расширений представлен спецификацией SQL/PSM). Перечень процедурных расширений для самых популярных СУБД приведён в следующей таблице.
СУБД |
Краткое название |
Расшифровка |
InterBase/Firebird |
PSQL |
Procedural SQL |
IBM DB2 |
SQL PL (англ.) |
SQL Procedural Language (расширяет SQL/PSM); также в DB2 хранимые процедуры могут писаться на обычных языках программирования: Си, Java и т.д. |
MS SQL Server/ Sybase ASE |
Transact-SQL |
Transact-SQL |
MySQL |
SQL/PSM |
SQL/Persistent Stored Module (соответствует стандарту SQL:2003[источник не указан 254 дня]) |
Oracle |
PL/SQL |
Procedural Language/SQL (основан на языке Ada) |
PostgreSQL |
PL/pgSQL |
Procedural Language/PostgreSQL Structured Query Language (очень похож на Oracle PL/SQL) |
Примечания
↑ Andy Oppel. Databases Demystified. — San Francisco, CA: McGraw-Hill Osborne Media. — С. 90—91. — ISBN 0-07-225364-9 — «„SEQUEL“ был торговой маркой британской авиастроительной группы компаний Hawker Siddeley»
↑ http://archives.postgresql.org/pgsql-hackers/2008-09/msg00071.php
↑ O’Reilly Network An Interview with Chris Date
↑ The Third Manifesto
См. также
QBE
SQL-дескриптор
SQL injection
Хранимая процедура
SQLCA
Ссылки
Текст стандарта SQL-92(англ.)
Форум по СУБД и SQL(рус.)
Упражнения по SQL. Самоучитель по SQL DML(рус.)(англ.)
SQL. Введение и руководство
Краткий курс SQL
Интерактивный учебник по SQL с примерами и задачами
Наиболее интересные новшества в стандарте SQL:2003
Литература
Бен Форта. Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с.
Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с.
К. Дж. Дейт. Введение в системы баз данных / Пер. с англ. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.
Кевин Клайн. SQL. Справочник. — М.: КУДИЦ-ОБРАЗ, 2006. — 832 с.
[показать] Базы данных |
|
Концепции |
Модель данных • Реляционные базы данных • Реляционная модель данных • Реляционная алгебра • Нормальная форма • Ссылочная целостность • Реляционная СУБД • Распределённые СУБД • ACID |
Ключи |
Первичный ключ • Внешний ключ • Суррогатный ключ • Суперключ • Возможный ключ |
Объекты |
Триггер • Представление • Таблица • Курсор • Журнализация изменений • Транзакция • Индекс • Хранимая процедура • Секционирование |
SQL |
SELECT • INSERT • UPDATE • MERGE • DELETE • JOIN • UNION • CREATE • ALTER • DROP • COMMIT • ROLLBACK |
Типы реализаций |
Иерархическая • Сетевая • Реляционная • Объектно-ориентированная |
Реализации СУБД |
DB2 • Firebird • PostgreSQL • MS SQL Server • MySQL • Oracle • SQLite |
Компоненты |
Язык запросов • Оптимизатор запросов • План выполнения запроса • ODBC • JDBC |
[скрыть] п·о·р Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
Академические |
Clean • Curry • Лого • ML • Модула-3 • Рефал • Симула |
IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
Прочие |
Алгол • Алгол 68 • Модула-2 • Miranda • Hope |
Эзотерические |
HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE |
Источник — «http://ru.wikipedia.org/wiki/SQL»
Категории: SQL | Стандарты ISO