SQL:2011
1. 개요
SQL:2011은 데이터베이스 언어인 SQL의 표준으로, 임시 데이터베이스 지원을 강화한 것이 특징이다. 이 표준은 프레임워크, 기초, Call-Level 인터페이스, Persistent Stored Modules, 외부 데이터 관리, 객체 언어 바인딩, 정보 및 정의 스키마, 자바 프로그래밍 언어를 사용한 SQL 루틴 및 타입, XML 관련 항목 등 여러 부분으로 구성된다. SQL:2011은 시간 기간 정의, 애플리케이션 시간 기간 테이블, 시스템 버전 테이블, 자동 시간 기간 분할, 시점 기본 키, 시점 참조 무결성, 시점 술어, 시간 분할 및 순차 쿼리, 이중 시점 테이블과 같은 기능을 제공하며, IBM DB2, Oracle, Microsoft SQL Server, MariaDB, PostgreSQL, Ebean ORM, CockroachDB, SAP HANA 등 다양한 데이터베이스 관리 시스템(DBMS)에서 지원된다.
| 발표 | 2011년 |
|---|---|
| 이전 버전 | SQL:2008 |
| 후속 버전 | SQL:2016 |
| 형식 | 표준 |
| 작성 기관 | ISO / IEC JTC1/SC32 |
-
2011년 도입된 제품 -
애플 실리콘
애플 실리콘은 애플이 자체 설계한 시스템 온 칩(SoC) 제품군으로, 아이폰, 아이패드, 맥 등 다양한 애플 기기에 사용되며 A, H, M, R, S, T, U, W 시리즈 및 M 시리즈 보조 프로세서로 구성된다. -
2011년 도입된 제품 -
화웨이 앱갤러리
화웨이 앱갤러리는 화웨이가 개발 및 운영하는 앱 마켓으로, 미국의 제재 이후 자체 HMS 기반으로 적극 육성되어 HarmonyOS와 연계한 독자적인 앱 생태계를 구축하고 있으며, 개인 정보 보호 논란에도 불구하고 글로벌 시장 확대를 추진하고 있다. -
질의 언어 -
임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. -
질의 언어 -
XQuery
XQuery는 함수형 프로그래밍 패러다임을 지원하며 XPath 식 구문의 상위 집합을 포함하는 XML 데이터 추출 및 조작을 위한 쿼리 언어로서, FLWOR 식을 통해 XML 데이터 조작 및 새로운 XML 문서 구성을 지원하고 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 한다. -
선언형 프로그래밍 언어 -
XAML
XAML은 마이크로소프트에서 개발한 XML 기반의 마크업 언어로, 사용자 인터페이스, 데이터 바인딩, 이벤트 처리 등을 정의하며 WPF, Silverlight, WF, WinRT API 앱, Xamarin.Forms 등에서 UI 개발에 널리 사용된다. -
선언형 프로그래밍 언어 -
임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
- 1. 개요
- 2. SQL:2011 표준의 부분
- 2.1. 프레임워크 (SQL/Framework)
- 2.2. 기초 (SQL/Foundation)
- 2.3. Call-Level 인터페이스 (SQL/CLI)
- 2.4. Persistent Stored Modules (SQL/PSM)
- 2.5. Management of External Data (SQL/MED)
- 2.6. Object Language Bindings (SQL/OLB)
- 2.7. 정보와 정의 스키마 (SQL/Schemata)
- 2.8. SQL Routines and Types Using the Java™ Programming Language (SQL/JRT)
- 2.9. XML-관련 항목 (SQL/XML)
- 3. SQL:2011의 새로운 기능
- 4. 데이터베이스 관리 시스템(DBMS) 지원 현황
2. SQL:2011 표준의 부분
| 번호 | 명칭 | 비고 |
|---|---|---|
| 1장 | SQL/프레임워크 | 프레임워크 |
| 2장 | SQL/기초 | 기초 |
| 3장 | SQL/CLI | Call-Level 인터페이스 |
| 4장 | SQL/PSM | Persistent Stored Modules |
| 9장 | SQL/MED | Management of External Data |
| 10장 | SQL/OLB | Object Language Bindings |
| 11장 | SQL/스키마타 | 정보와 정의 스키마 |
| 13장 | SQL/JRT | SQL Routines and Types Using the Java™ Programming Language |
| 14장 | SQL/XML | XML-관련 항목 |
2.1. 프레임워크 (SQL/Framework)
| 번호 | 명칭 | 비고 |
|---|---|---|
| 1장 | SQL/프레임워크 | 프레임워크 |
| 2장 | SQL/기초 | 기초 |
| 3장 | SQL/CLI | Call-Level 인터페이스 |
| 4장 | SQL/PSM | Persistent Stored Modules |
| 9장 | SQL/MED | Management of External Data |
| 10장 | SQL/OLB | Object Language Bindings |
| 11장 | SQL/스키마타 | 정보와 정의 스키마 |
| 13장 | SQL/JRT | SQL Routines and Types Using the Java™ Programming Language |
| 14장 | SQL/XML | XML-관련 항목 |
2.4. Persistent Stored Modules (SQL/PSM)
SQL/PSM은 SQL 내에서 저장 프로시저, 함수, 트리거 등 영구적으로 저장되는 모듈을 정의하고 사용하는 방법을 다룬다.
2.7. 정보와 정의 스키마 (SQL/Schemata)
| 파트 번호 | 파트 이름 | 비고 |
|---|---|---|
| 1장 | SQL/프레임워크 | |
| 2장 | SQL/기초 | |
| 3장 | SQL/CLI | কল-লেভেল ইন্টারফেস (Call-Level Interface) |
| 4장 | SQL/PSM | 영구 저장 모듈 (Persistent Stored Modules) |
| 9장 | SQL/MED | 외부 데이터 관리 (Management of External Data) |
| 10장 | SQL/OLB | 객체 언어 바인딩 (Object Language Bindings) |
| 11장 | SQL/스키마타 | 정보 및 정의 스키마 |
| 13장 | SQL/JRT | Java™ 프로그래밍 언어를 사용한 SQL 루틴 및 유형 (SQL Routines and Types Using the Java™ Programming Language) |
| 14장 | SQL/XML | XML 관련 항목 |
2.8. SQL Routines and Types Using the Java™ Programming Language (SQL/JRT)
SQL/JRT는 Java 프로그래밍 언어를 사용하여 SQL 루틴 및 사용자 정의 타입을 정의하는 방법을 다룬다.
3. SQL:2011의 새로운 기능
SQL:2011의 주요 특징 중 하나는 임시 데이터베이스에 대한 향상된 지원이다. IBM DB2 버전 10은 소위 “시간 여행 쿼리”(Time Travel Queries)라고 부르는 이러한 특징을 최초로 구현하였다.
SQL:2011은 시점 데이터베이스의 정의 및 조작을 위한 언어 개선 사항을 포함한다. 주요 내용은 다음과 같다.
* 애플리케이션 시간 테이블은 일반 쿼리 구문을 사용하거나, 앨런의 간격 관계를 수정한 새로운 시점 술어를 사용하여 쿼리할 수 있다.
* 애플리케이션 시간과 시스템 버전 관리를 함께 사용하여 이중 시점 테이블을 제공할 수 있다.
3.1. 시간 기간 정의
시간 기간 정의는 명명된 시간 기간의 시작과 끝을 나타내는 두 개의 표준 테이블 열을 사용하며, 닫힌 집합-열린 집합 의미 체계를 따른다. 이는 기존의 데이터 모델, 애플리케이션 코드 및 도구와의 호환성을 제공한다.
3.3. 시스템 버전 테이블
PERIOD FOR SYSTEM_TIME영어 주석과 WITH SYSTEM VERSIONING영어 수정자를 사용하여 시스템 버전 테이블(다른 곳에서는 트랜잭션 시간 테이블이라고 함)을 정의한다. 시스템 시간 기간은 자동으로 유지 관리된다. 시스템 버전 테이블에 대한 제약 조건은 시점일 필요가 없으며 현재 행에 대해서만 적용된다.
3.5. 시점 기본 키
`WITHOUT OVERLAPS` 절을 통해 선택적인 비중첩 제약 조건을 포함하는 애플리케이션 시간 기간을 통합하는 시점 기본 키이다.
3.6. 시점 참조 무결성
애플리케이션 시간 테이블에 대한 시점 참조 무결성 제약 조건을 정의한다.
3.7. 시점 술어
앨런의 간격 관계의 수정된 버전인 `CONTAINS`, `OVERLAPS`, `EQUALS`, `PRECEDES`, `SUCCEEDS`, `IMMEDIATELY PRECEDES`, `IMMEDIATELY SUCCEEDS` 등을 포함하는 시간 기간에 대한 새로운 시점 술어를 사용하여 시점 데이터베이스에 대한 쿼리를 수행할 수 있다.
4. 데이터베이스 관리 시스템(DBMS) 지원 현황
다양한 데이터베이스 관리 시스템(DBMS)들이 SQL:2011 표준의 시간 데이터 처리 기능을 지원하고 있으며, 각 DBMS별 지원 현황은 아래 표와 같다.
| DBMS | 지원 현황 |
|---|---|
| SAP HANA | 2.0 SP03부터 시스템 버전 테이블을 지원하며, 2.0 SP04에서는 애플리케이션 시간 버전 관리에 대한 부분적인 지원이 추가되었다. |
| IBM DB2 | 버전 10부터 "시간 여행 쿼리"(Time Travel Queries) 기능을 지원한다. |
| 오라클 | 12c 버전부터 SQL:2011을 준수하는 시간적 기능을 지원하며, 이전 버전(9, 10g, 11g)에서는 Flashback Queries 기능을 통해 시간 슬라이스 쿼리를 구현했다. |
| 마이크로소프트 SQL 서버 | 버전 2016부터 시간 테이블을 구현한다. |
| MariaDB | 10.3 버전부터 시스템 버전 테이블을 지원하며, 10.4.3 버전부터 애플리케이션 버전 테이블에 대한 지원을 추가했다. |
| PostgreSQL | temporal_tables 확장을 설치해야 하며, 시스템 기간 시간 테이블만 지원하고 SQL:2011 설계를 따르지 않는다. |
| Ebean ORM | PostgreSQL 및 MySQL에서 History AS OF 및 VERSIONS BETWEEN 쿼리를 지원한다. |
| CockroachDB | 최소 v1.0.7부터 `AS OF SYSTEM TIME` 쿼리를 지원한다. |
4.1. SAP HANA
SAP HANA 2.0 SP03은 표준 `SELECT` 구문 `FOR SYSTEM_TIME AS OF '
4.2. IBM DB2
IBM DB2 버전 10은 "시간 여행 쿼리"(Time Travel Queries)라고 부르는 기능을 지원하며, `FOR SYSTEM_TIME AS OF` 구문을 사용한다.
4.3. Oracle Database
오라클 12c는 SQL:2011을 준수하는 시간적 기능을 지원한다. 버전 9, 10g 및 11g는 Flashback Queries라고 부르는 기능을 사용하여 시간 슬라이스 쿼리를 구현하며, `AS OF TIMESTAMP` 구문을 사용한다. 특히 오라클의 두 구현 모두 데이터베이스의 롤백 세그먼트에 의존하므로, 백업을 위해 여전히 유지되는 최근 변경 사항에 대해서만 시간적 쿼리를 허용한다.
4.4. Microsoft SQL Server
마이크로소프트 SQL 서버 (버전 2016)는 `SYSTEM_VERSIONING`으로 시간 테이블을 구현한다.
4.6. PostgreSQL
PostgreSQL은 [https://github.com/arkhipov/temporal_tables temporal_tables 확장] 설치가 필요하다. Temporal Tables Extension은 시스템 기간 시간 테이블만 지원하지만, SQL:2011 설계를 따르지 않는다.
4.7. Ebean ORM
Ebean ORM은 PostgreSQL 및 MySQL에서 트리거, 히스토리 테이블, 뷰를 사용하여 History AS OF 및 VERSIONS BETWEEN 쿼리를 지원한다.