SQL:2011 (SQL&2011)

Перейти к навигации Перейти к поиску

SQL:2011 или ISO/IEC 9075:2011 (под общим названием «Информационные технологии — Языки баз данных — SQL») — седьмая редакция стандарта ISO (1987) и ANSI (1986) для языка запросов к базам данных SQL. Он был официально принят в декабре 2011 года[1]. Следующая версия — SQL:2016.

Новые возможности

[править | править код]

Одной из главных новых функций является улучшенная поддержка хронологических баз данных[2][3]. Улучшения языка для определения и обработки хронологических данных включают:

  • Определения временных периодов используют два стандартных столбца таблицы в качестве начала и конца именованного временного периода с семантикой замкнутого множества/открытого множества. Это обеспечивает совместимость с существующими моделями данных, кодом приложения и инструментами
  • Определение таблиц периодов времени приложения (иначе называемых таблицами текущего времени[англ.]) с использованием аннотации PERIOD FOR
  • Обновление и удаление строк времени приложения с автоматическим разделением периода времени
  • Временные первичные ключи, включающие периоды времени приложения с необязательными неперекрывающимися ограничениями через выражение WITHOUT OVERLAPS
  • Временные ограничения ссылочной целостности для исторических таблиц приложения
  • Данные из исторических таблиц приложения извлекаютсяя с использованием обычного синтаксиса запросов или с использованием новых временных предикатов для периодов времени, включая CONTAINS, OVERLAPS, EQUALS, PRECEDES, SUCCEEDS, IMMEDIATELY PRECEDES и IMMEDIATELY SUCCEEDS (которые являются модифицированными версиями интервальных отношений Аллена)
  • Определение системно-версионных таблиц (иначе называемых таблицами времени транзакций[англ.]) с использованием аннотации PERIOD FOR SYSTEM_TIME и модификатора WITH SYSTEM VERSIONING. Системные периоды времени поддерживаются автоматически. Ограничения для системных таблиц с версиями не обязательно должны быть временными и применяются только к текущим строкам.
  • Синтаксис для запросов с временными срезами и последовательностями для системных исторических таблиц с помощью предложений AS OF SYSTEM TIME и VERSIONS BETWEEN SYSTEM TIME ... AND ....
  • Время приложения и системное управление версиями могут использоваться совместно для работы с битемпоральными[англ.] таблицами.

Реализация в СУБД

[править | править код]

SAP HANA 2.0 SP03 поддерживает системные версии таблиц[4] с использованием стандартного синтаксиса выбора FOR SYSTEM_TIME AS OF '<timestamp1>'[5] SAP HANA 2.0 SP04 добавляет (частичную) поддержку версионирования во время выполнения приложения[6].

IBM DB2 версии 10 заявлена как первая база данных, которая имеет соответствующую реализацию этой функции, названной как «Time Travel Queries»(Запросы, путешествующие во времени)[7][8], хотя они используют альтернативный синтаксис FOR SYSTEM_TIME AS OF.

Oracle 12c поддерживает временную функциональность в соответствии с SQL:2011[9]. Версии 9i[10][11], 10g[12] и 11g реализуют запросы с временными сдвигами с помощью так называемых Flashback Queries, используя альтернативный синтаксис AS OF TIMESTAMP[13]. Примечательно, что обе реализации Oracle зависят от сегменте отката базы данных и поэтому допускают только временные запросы к недавним изменениям, которые ещё сохраняются в сегменте отката.

Microsoft SQL Server (версия 2016) реализует хронологические таблицы с помощью конструкции SYSTEM_VERSIONING[14].

MariaDB 10.3 реализует таблицы с системными версиями[15]. MariaDB 10.4.3 добавила поддержку для таблиц с версионированием приложений[16].

PostgreSQL требует установки расширения temporal_tables. Расширение Temporal Tables поддерживает только хронологические таблицы с системным периодом, и не соответствует дизайну SQL:2011.

Ebean[англ.] ORM поддерживает запросы History AS OF и VERSIONS BETWEEN в PostgreSQL и MySQL с использованием триггеров, таблиц истории и представлений[17].

CockroachDB[англ.] поддерживает запросы AS OF SYSTEM TIME начиная с версии 1.0.7[18][19][20].

Примечания

[править | править код]
  1. Paulley (December 16, 2011), "SQL:2011 is published", IA, Sybase, Архивировано из оригинала (blog) 11 июля 2012
  2. Zemke, Fred. «What’s new in SQL:2011». ACM SIGMOD Record 41.1 (2012): 67-73
  3. Kulkarni, Krishna and Jan-Eike Michels. «Temporal features in SQL: 2011». ACM SIGMOD Record 41.3 (2012): 34-43
  4. SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
  5. SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
  6. loading... | SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
  7. {{Cite web |url=http://www.ibm.com/developerworks/data/library/techarticle/dm-1204whatsnewdb210/index.html |title=Data management |website=IBM} |lang=en}
  8. Data management (англ.). IBM.
  9. Jean-Francois Verrier, Dominique Jeunot. Implementing Temporal Validity (англ.).
  10. flashback query in oracle 9i (англ.). www.oracle-developer.net. Дата обращения: 1 ноября 2024.
  11. Flashback Query (англ.). oracle-base.com. Дата обращения: 1 ноября 2024.
  12. 15 Using Flashback Features (англ.). docs.oracle.com. Дата обращения: 2 ноября 2024.
  13. Database SQL Reference (англ.). docs.oracle.com. Дата обращения: 1 ноября 2024.
  14. rwestMSFT Temporal tables - SQL Server (англ.). learn.microsoft.com (29 июля 2024). Дата обращения: 1 ноября 2024.
  15. Changes & Improvements in MariaDB 10.3 (англ.).
  16. Application-Time Periods (англ.). MariaDB KnowledgeBase. Дата обращения: 1 ноября 2024.
  17. History | Ebean (англ.). ebean.io. Дата обращения: 1 ноября 2024.
  18. AS OF SYSTEM TIME (англ.). CockroachDB Docs. Дата обращения: 1 ноября 2024.
  19. AS OF SYSTEM TIME (англ.). CockroachDB Docs. Дата обращения: 1 ноября 2024.
  20. "Time-Travel Queries: SELECT witty_subtitle FROM THE FUTURE". Cockroach Labs. 22 June 2016.

Внешние ссылки

[править | править код]