SQL:1999
SQL:1999 (также известный как SQL3) — это стандарт языка структурированных запросов (SQL), принятый Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в 1999 году. Он является четвёртой ревизией стандарта SQL (после SQL-86, SQL-89 и SQL-92) и представляет собой значительное расширение возможностей языка, выходящее за рамки реляционной модели данных.
История
Разработка SQL:1999 началась вскоре после принятия SQL:92, который стал первым широко признанным стандартом, но имел ряд ограничений. Основной целью было добавление поддержки объектно-реляционных концепций, что отражало растущий интерес к объектно-ориентированным базам данных в 1990-х годах. Процесс стандартизации затянулся из-за сложности новых функций и необходимости согласования позиций различных производителей СУБД (Oracle, IBM, Microsoft, Sybase и др.). Окончательная версия была опубликована в 1999 году под обозначением ISO/IEC 9075:1999.
Основные нововведения
SQL:1999 внёс ряд фундаментальных изменений, которые значительно расширили функциональность языка. Ключевые нововведения включают:
Объектно-реляционные расширения
Стандарт ввёл концепцию пользовательских типов данных (UDT), позволяющих определять сложные структуры данных с методами и атрибутами. Это включало:
- Типы-сущности (structured types): возможность создания типов с атрибутами и методами, аналогично классам в объектно-ориентированных языках программирования.
- Ссылочные типы (REF): возможность ссылаться на строки таблицы как на объекты, что позволяло реализовывать ассоциации между объектами.
- Наследование типов и таблиц: поддержка иерархий типов, где один тип может наследовать атрибуты и методы другого.
- Методы: возможность определять функции, привязанные к пользовательским типам данных.
Расширения языка манипулирования данными (DML)
- Рекурсивные запросы: введено ключевое слово
WITH RECURSIVE, позволяющее выполнять рекурсивные запросы к иерархическим или графовым данным (например, поиск всех подчинённых в организационной структуре). - MERGE (upsert): оператор
MERGE(также известный какREPLACEилиUPSERT) позволяет выполнять вставку, обновление или удаление строк в одной таблице на основе данных из другой таблицы или подзапроса. - Оконные функции (window functions): введены функции
ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()и другие, позволяющие выполнять вычисления над наборами строк, связанных с текущей строкой, без группировки результата.
Расширения языка определения данных (DDL)
- Триггеры: стандарт определил синтаксис для создания триггеров, которые автоматически выполняются при определённых событиях (INSERT, UPDATE, DELETE) на таблице или представлении.
- Представления (views): добавлена поддержка материализованных представлений (materialized views), которые физически хранят результаты запроса.
- Ограничения (constraints): расширены возможности ограничений, включая поддержку
CHECKс подзапросами иUNIQUEна нескольких столбцах.
Управление транзакциями и параллелизмом
- Уровни изоляции: стандарт уточнил и расширил определение уровней изоляции транзакций (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE), включая описание фантомных чтений.
- SAVEPOINT: введена возможность устанавливать точки сохранения внутри транзакции, позволяя выполнять частичный откат.
Структура стандарта
SQL:1999 состоит из нескольких частей (parts), каждая из которых описывает определённый аспект языка:
- ISO/IEC 9075-1:1999 (Framework): общая структура и концепции.
- ISO/IEC 9075-2:1999 (Foundation): основные элементы языка, включая синтаксис, типы данных, выражения, операторы.
- ISO/IEC 9075-3:1999 (Call Level Interface): интерфейс для вызова SQL из прикладных программ (ODBC, JDBC).
- ISO/IEC 9075-4:1999 (Persistent Stored Modules): язык для создания хранимых процедур и функций (PSM).
- ISO/IEC 9075-5:1999 (Host Language Bindings): привязки к языкам программирования (C, COBOL, Fortran, Pascal, PL/I).
- ISO/IEC 9075-6:1999 (Transaction Management): управление транзакциями.
- ISO/IEC 9075-7:1999 (Temporal Data): поддержка временных данных (временные таблицы, интервалы времени).
- ISO/IEC 9075-8:1999 (Object Management): объектно-реляционные расширения.
- ISO/IEC 9075-9:1999 (SQL/MM): поддержка мультимедийных данных (текст, изображения, аудио, видео).
- ISO/IEC 9075-10:1999 (SQL/OLB): поддержка объектно-реляционных баз данных (Object Language Bindings).
Влияние и реализация
SQL:1999 оказал значительное влияние на развитие коммерческих и открытых СУБД. Многие из его нововведений, такие как оконные функции, рекурсивные запросы и оператор MERGE, стали стандартными функциями в современных системах:
- Oracle Database: реализовала большинство функций SQL:1999, включая оконные функции, рекурсивные запросы и объектные типы.
- Microsoft SQL Server: поддержка оконных функций, рекурсивных запросов и оператора
MERGEпоявилась в версии 2005 года. - PostgreSQL: активно поддерживает SQL:1999, включая оконные функции, рекурсивные запросы, пользовательские типы данных и триггеры.
- MySQL: частичная поддержка, например, оконные функции и рекурсивные запросы появились в версии 8.0.
Критика
Несмотря на значительные улучшения, SQL:1999 подвергался критике за несколько аспектов:
- Сложность: стандарт стал чрезвычайно объёмным и сложным для понимания и реализации. Многие разработчики и администраторы баз данных не использовали все его возможности.
- Неполная реализация: ни одна СУБД не реализовала стандарт полностью, что привело к фрагментации и различиям в синтаксисе между системами.
- Объектно-реляционный подход: некоторые критики утверждали, что объектно-реляционные расширения (типы, наследование) плохо интегрированы с реляционной моделью и усложняют разработку, не предоставляя существенных преимуществ.
- Отсутствие поддержки XML: стандарт не предусматривал работу с XML, что стало актуальным в начале 2000-х годов. Эта проблема была решена в следующей версии (SQL:2003).
Источники
- ISO/IEC 9075:1999, Information technology — Database languages — SQL.
- Date, C. J. (2003). An Introduction to Database Systems (8th ed.). Addison-Wesley.
- Melton, J., & Simon, A. R. (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann.
- Chamberlin, D. (1998). A Complete Guide to DB2 Universal Database. Morgan Kaufmann.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →