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].
См. также
[править | править код]Примечания
[править | править код]- ↑ Paulley (December 16, 2011), "SQL:2011 is published", IA, Sybase, Архивировано из оригинала (blog) 11 июля 2012
- ↑ Zemke, Fred. «What’s new in SQL:2011». ACM SIGMOD Record 41.1 (2012): 67-73
- ↑ Kulkarni, Krishna and Jan-Eike Michels. «Temporal features in SQL: 2011». ACM SIGMOD Record 41.3 (2012): 34-43
- ↑ SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
- ↑ SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
- ↑ loading... | SAP Help Portal (англ.). help.sap.com. Дата обращения: 1 ноября 2024.
- ↑ {{Cite web |url=http://www.ibm.com/developerworks/data/library/techarticle/dm-1204whatsnewdb210/index.html |title=Data management |website=IBM} |lang=en}
- ↑ Data management (англ.). IBM.
- ↑ Jean-Francois Verrier, Dominique Jeunot. Implementing Temporal Validity (англ.).
- ↑ flashback query in oracle 9i (англ.). www.oracle-developer.net. Дата обращения: 1 ноября 2024.
- ↑ Flashback Query (англ.). oracle-base.com. Дата обращения: 1 ноября 2024.
- ↑ 15 Using Flashback Features (англ.). docs.oracle.com. Дата обращения: 2 ноября 2024.
- ↑ Database SQL Reference (англ.). docs.oracle.com. Дата обращения: 1 ноября 2024.
- ↑ rwestMSFT Temporal tables - SQL Server (англ.). learn.microsoft.com (29 июля 2024). Дата обращения: 1 ноября 2024.
- ↑ Changes & Improvements in MariaDB 10.3 (англ.).
- ↑ Application-Time Periods (англ.). MariaDB KnowledgeBase. Дата обращения: 1 ноября 2024.
- ↑ History | Ebean (англ.). ebean.io. Дата обращения: 1 ноября 2024.
- ↑ AS OF SYSTEM TIME (англ.). CockroachDB Docs. Дата обращения: 1 ноября 2024.
- ↑ AS OF SYSTEM TIME (англ.). CockroachDB Docs. Дата обращения: 1 ноября 2024.
- ↑ "Time-Travel Queries: SELECT witty_subtitle FROM THE FUTURE". Cockroach Labs. 22 June 2016.
Внешние ссылки
[править | править код]- "SQL:2011", Catalogue (webshop), ISO.
- Part 1: Framework (SQL/Framework) (draft; PDF), JTC1SC32, 2011-08-06.
- Part 14: XML-Related Specifications (SQL/XML) (draft; PDF), JTC1SC32, 2011-08-06.
- List of further freely available Final Committee Drafts (search).
- Oracle 11g Total Recall Whitepaper (PDF), Oracle, 2009-09-01.