結構化查詢語言/SQL:ISO IEC 9075 標準及各種實現
與大多數其他標準一樣,SQL 的主要目的是可移植性。通常,軟體設計人員和應用程式開發人員分層構建和解決問題。每個抽象級別都在其自己的元件或子元件中實現:對終端使用者的呈現、業務邏輯、資料訪問、資料儲存、網路和作業系統需求是此類元件的典型代表。它們被組織成一個堆疊,每一層都提供了一個介面供上層使用其功能。如果其中一個元件由兩個不同的提供商實現,並且兩者都提供了相同的介面(作為 API、Web 服務、語言規範等),則可以交換它們,而無需更改基於它們的層。從本質上講,軟體行業需要穩定的介面,位於基本層的頂部,以避免對單個提供商的依賴。SQL 充當此類介面,用於訪問關係資料庫系統。
如果應用程式僅使用標準 SQL 中定義的那些 SQL 命令,則應該能夠將底層的 rDBMS 替換為另一個,而無需更改應用程式的原始碼。在實踐中,這是一個艱鉅的任務,因為具體的實現提供了許多額外的功能,而軟體工程師喜歡使用它們。
第二個方面是知識的保留。如果一個學生學習 SQL,他就可以開發基於任意資料庫系統的應用程式。這種情況類似於任何其他流行的程式語言。如果一個人學習 Java 或 C-Sharp,他可以開發執行在許多不同硬體系統甚至不同硬體架構上的任何型別的應用程式。
資料庫系統由許多元件組成。訪問資料是一個基本要素,但不是唯一的元件。其他元件包括:吞吐量最佳化、物理設計、備份、分散式資料庫、複製、7x24 可用性等。標準 SQL 主要關注資料訪問,而忽略了典型的 DBA 任務。即使是CREATE INDEX語句作為一種廣泛使用的最佳化策略,也不屬於標準。儘管如此,標準仍然包含數千頁。但是,DBA 大多數日常工作都高度專門化,適用於每個具體的實現,並且在切換到不同的 rDBMS 時必須以不同的方式完成。主要由應用程式開發人員從 SQL 中受益。
標準化過程分為兩個層次。第一層在國家層面上進行。有興趣的公司、大學和一個國家的人員在其國家標準化組織中工作,例如 ANSI、德國標準化協會 (DIN) 或 英國標準協會 (BSI),其中每個成員有一票。第二層是國際舞臺。國家組織是 ISO 或 IEC 的成員。就 SQL 而言,有一個由 ISO 和 IEC 組成的聯合委員會,名為 ISO/IEC JTC 1 聯合技術委員會,資訊科技,分委員會 SC 32,資料管理和交換,其中每個國家機構有一票。該委員會批准該標準,名稱為ISO/IEC 9075-n:yyyy,其中n是部分編號,yyyy是出版年份。該標準的十個部分簡要介紹 這裡。
如果委員會發布新版本,這可能只涉及十個部分中的某些部分。因此,yyyy標註可能因部分而異。核心 SQL 主要由第二部分定義:ISO/IEC 9075-2:yyyy 第 2 部分:基礎 (SQL/Foundation) - 但它也包含其他部分的一些功能。
注意:API JDBC 是 Java SE 和 Java EE 的一部分,但不是 SQL 標準的一部分。
第二個緊密相關的標準是對標準的補充:ISO/IEC 13249-n:yyyy SQL 多媒體和應用程式包,由相同的組織和委員會開發。該出版物定義了基於 SQL 的介面和包。它們專注於特定型別的應用程式:文字、圖片、資料探勘和空間資料應用程式。
在 1996 年之前,美國國家標準與技術研究院 (NIST) 認證 rDBMS 的 SQL 實現是否符合 SQL 標準。由於 NIST 放棄了這項工作,如今,供應商自行認證其產品的符合性。他們必須在其文件的特殊附錄中宣告符合程度。該文件可能非常龐大,因為標準不僅定義了一組基本功能 - 稱為核心 SQL:yyyy - 而且還定義了許多其他功能,實現可能符合或不符合。
為了滿足客戶的需求,所有主要的 rDBMS 供應商在其產品中提供 SQL 語言 - 除了其他資料訪問方式。實現涵蓋核心 SQL、許多其他標準化功能以及大量非標準化功能。訪問標準化功能可以使用常規語法或特定於實現的語法。從本質上講,SQL 是將所有內容聯絡在一起的夾具,但通常會繞過官方語言進行很多迂迴。