Открыть сервис

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 →