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

Стандарт SQL:2011

SQL:2011 — это версия международного стандарта языка структурированных запросов SQL, принятая Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в декабре 2011 года. Официальное обозначение — ISO/IEC 9075:2011. Стандарт является эволюционным развитием предыдущей версии SQL:2008 и вводит ряд существенных дополнений, направленных на улучшение работы с временными данными, оконными функциями и расширение возможностей языка.

История

Разработка SQL:2011 началась сразу после завершения работы над SQL:2008. Основной целью было устранение давно существовавших пробелов в стандарте, особенно в области поддержки темпоральных (временных) данных. В 2000-х годах многие крупные СУБД, такие как Oracle, IBM DB2 и Teradata, уже имели собственные реализации темпоральных таблиц, однако отсутствие единого стандарта приводило к несовместимости и сложностям при переносе приложений. Рабочая группа ISO/IEC JTC 1/SC 32 (Управление данными и обмен ими) подготовила проект, который был опубликован в декабре 2011 года. Впоследствии стандарт был дополнен поправками (Amendments) в 2013, 2014 и 2016 годах, а затем заменён версией SQL:2016.

Основные нововведения

Темпоральные данные

Наиболее значимым нововведением SQL:2011 стала стандартизация поддержки темпоральных данных. Стандарт вводит понятие темпоральных таблиц, которые позволяют хранить историю изменений данных и выполнять запросы к состоянию базы данных на любой момент времени. Выделяются два типа темпоральности:

  • Время приложения (Application-time period tables) — таблицы, в которых пользователь явно задаёт период действия записи (например, дата начала и окончания действия договора). Для этого используются столбцы с типом данных PERIOD (например, PERIOD(DATE)).
  • Время системы (System-versioned tables) — таблицы, в которых СУБД автоматически отслеживает, когда запись была создана или изменена. Система хранит как текущие, так и исторические версии строк, позволяя выполнять запросы к состоянию базы данных на любой момент времени (AS OF SYSTEM TIME).

Стандарт определяет ключевые слова FOR SYSTEM_TIME и AS OF для запросов к историческим данным. Например, запрос SELECT * FROM employees AS OF SYSTEM TIME '2015-01-01' возвращает состояние таблицы на 1 января 2015 года.

Улучшения оконных функций

SQL:2011 расширил возможности оконных функций (OLAP-функций), введённых в SQL:2003. Были добавлены:

  • Фильтрация оконных фреймов — возможность указывать условие EXCLUDE для исключения из окна текущей строки, её группы или других элементов. Например, ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW.
  • Поддержка GROUPS — новый тип оконного фрейма, который группирует строки по значениям столбца сортировки, а не по физическому смещению. Это позволяет выполнять более гибкие вычисления, например, скользящие суммы по группам равных значений.
  • Расширенные агрегатные функции — уточнена семантика функций RANK, DENSE_RANK, NTILE и других.

Поддержка последовательностей (Sequences)

Стандарт SQL:2011 впервые включил полноценную поддержку генераторов последовательностей (sequences) — объектов, автоматически генерирующих уникальные числовые значения. Ранее эта функциональность была реализована в большинстве СУБД проприетарно (например, SEQUENCE в Oracle, SERIAL в PostgreSQL). Стандарт определил синтаксис CREATE SEQUENCE, ALTER SEQUENCE и NEXT VALUE FOR, а также правила кэширования и транзакционной изоляции.

Другие изменения

  • Расширенная поддержка типов данных — уточнена работа с типами XML, JSON (в поправках 2013–2016 годов), а также с большими объектами (BLOB, CLOB).
  • Улучшения в DDL — добавлена возможность создания таблиц с использованием CREATE TABLE ... AS (CTAS) в стандартном синтаксисе, а также поддержка IF NOT EXISTS и IF EXISTS (хотя последние были формализованы позже).
  • Новые функции для работы со строками — функции TRIM, SUBSTRING, CONCAT получили уточнённую семантику, добавлена поддержка регулярных выражений (через SIMILAR TO и LIKE_REGEX).
  • Поддержка циклических ссылок в рекурсивных запросах — уточнена работа с WITH RECURSIVE для предотвращения бесконечных циклов.

Влияние на рынок СУБД

SQL:2011 оказал значительное влияние на развитие коммерческих и открытых систем управления базами данных. Крупные вендоры, такие как Oracle, IBM DB2, Microsoft SQL Server и PostgreSQL, начали внедрять темпоральные таблицы в своих продуктах в течение нескольких лет после публикации стандарта.

  • Oracle — реализовала темпоральные таблицы в версии 12c (2013 год), включив поддержку как времени приложения, так и времени системы.
  • IBM DB2 — поддерживала темпоральные таблицы с версии 10 (2012 год), частично опережая стандарт.
  • PostgreSQL — добавила поддержку системно-версионируемых таблиц в версии 10 (2017 год), а также предоставляет расширение pg_temporal для полной реализации стандарта.
  • Microsoft SQL Server — ввёл темпоральные таблицы в версии 2016 года, с поддержкой SYSTEM_VERSIONING.
  • MySQL — реализовал системно-версионируемые таблицы в версии 8.0 (2018 год), но с некоторыми отступлениями от стандарта.

Критика и ограничения

Несмотря на прогресс, SQL:2011 подвергался критике за недостаточную проработанность некоторых аспектов. В частности:

  • Сложность синтаксиса — темпоральные запросы требуют громоздких конструкций, что затрудняет их использование в простых приложениях.
  • Отсутствие поддержки встроенных типов PERIOD — стандарт определяет период как два столбца с типом DATE или TIMESTAMP, но не вводит отдельный тип данных, что приводит к дублированию кода.
  • Неполная реализация в СУБД — многие вендоры реализовали стандарт выборочно, опуская некоторые функции (например, EXCLUDE в оконных фреймах или GROUPS).
  • Проблемы с производительностью — системно-версионируемые таблицы требуют дополнительного хранения исторических данных, что может приводить к увеличению объёмов хранилищ и замедлению операций вставки/обновления.

Значение

SQL:2011 стал важным шагом в эволюции языка SQL, впервые стандартизировав поддержку темпоральных данных — одну из наиболее востребованных функций в корпоративных приложениях, таких как бухгалтерский учёт, управление персоналом и финансовый анализ. Введение последовательностей и улучшение оконных функций повысило выразительность языка и сократило необходимость в использовании проприетарных расширений. Стандарт заложил основу для последующей версии SQL:2016, которая включила поддержку JSON, полиформных таблиц и другие нововведения.

Источники

  • ISO/IEC 9075:2011 — Information technology — Database languages — SQL.
  • Melton, J. (2012). SQL:2011 — The New Standard for Temporal Data. ACM SIGMOD Record.
  • International Organization for Standardization (ISO). SQL:2011 Overview.
  • Документация Oracle Database 12c, IBM DB2 10, PostgreSQL 10, Microsoft SQL Server 2016.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →