SQL標準簡介

SQL標準簡介

  SQL是Structured Query Language的縮寫,它的前身是著名的關係數據庫原型系統System R所採用的SEQUEL語言。作爲一種訪問關係型數據庫的標準語言,SQL自問世以來得到了廣泛的應用,不僅是著名的大型商用數據庫產品Oracle、DB2、Sybase、SQL Server支持它,很多開源的數據庫產品如PostgreSQL、MySQL也支持它,甚至一些小型的產品如Access也支持SQL。近些年蓬勃發展的NoSQL系統最初是宣稱不再需要SQL的,後來也不得不修正爲Not Only SQL,來擁抱SQL。

  藍色巨人IBM對關係數據庫以及SQL語言的形成和規範化產生了重大的影響,第一個版本的SQL標準SQL86就是基於System R的手冊而來的。Oracle在1979年率先推出了支持SQL的商用產品。隨着數據庫技術和應用的發展,爲不同RDBMS提供一致的語言成了一種現實需要。

  對SQL標準影響最大的機構自然是那些著名的數據庫產商,而具體的制訂者則是一些非營利機構,例如國際標準化組織ISO、美國國家標準委員會ANSI等。各國通常會按照 ISO標準和ANSI標準(這兩個機構的很多標準是差不多等同的)制定自己的國家標準。中國是ISO標準委員會的成員國,也經常翻譯一些國際標準對應的中文版。標準爲了避免採用具體產品的術語,往往會抽象出很多名詞,從而增加了閱讀和理解的難度,翻譯成中文之後更容易詞不達意。對於數據庫系統實現者和用戶而言,很多時候還不如直接讀英文版本爲好。雖然正式的標準不像RFC那樣可以從網絡上免費獲得,標準草案還是比較容易找到的(例如:http://www.jtc1sc32.org/doc/)。待批准的標準草案和最終的標準也沒有什麼實質上的區別,能夠滿足日常工作的需要。

  下面是SQL發展的簡要歷史:
1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86
1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89
1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)
1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)
2003年,ISO/IEC 9075:2003,SQL:2003
2008年,ISO/IEC 9075:2008,SQL:2008
2011年,ISO/IEC 9075:2011,SQL:2011

  細心的讀者能發現,從SQL:1999開始,標準簡稱中的短橫線(-)被換成了冒號(:),而且標準制定的年份也改用四位數字了。前一個修改的原因是ISO標準習慣上採用冒號,ANSI標準則一直採用短橫線。後一個修改的原因是標準的命名也遇到了2000年問題。

  SQL86大概只有幾十頁,SQL92正文大約有500頁,而SQL99則超過了1000頁。可以看出,從SQL99開始,SQL標準的個頭就非常龐大了,內容包羅萬象,已經沒有人能夠掌握標準的所有內容了。以SQL:2003爲例,它包括以下9個部分(中間編號空缺是曾經被佔用,之後被廢棄的標準造成的):

ISO/IEC9075-1: Framework (SQL/Framework)
ISO/IEC 9075-2: Foundation (SQL/Foundation)
ISO/IEC 9075-3: Call Level Interface (SQL/CLI)
ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9: Management of External Data (SQL/MED)
ISO/IEC 9075-10: Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11: Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13: Java Routines and Types Using the Java Programming Language(SQL/JRT)
ISO/IEC 9075-14: XML-Related Specifications (SQL/XML)

負責具體制定工作的是ISO和IEC聯合成立的一個技術委員會JTC1/SC32。正因爲關係數據庫市場非常成熟,競爭不夠激烈,標準本身變得過於龐大等原因,SQL3制定的週期很長,制定期間也存在很多爭議。例如文章《Is SQL a Real Standard Anymore?》對SQL標準化進程提出了置疑。

  如果要了解標準的內容,比較推薦的方法是泛讀SQL92(因爲它涉及了SQL最基礎和最核心的一些內容),然後增量式的閱讀其他標準。標準在每次更新的時候,委員會的成員們都爲大家提供比較好的介紹文檔。例如針對最新的SQL:2011,SIGMODRecord上就有很不錯的介紹:http://www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf

  最後再簡要介紹一下SQL標準的符合程度。絕大多數人提起SQL標準,涉及的內容其實是SQL92裏頭最基本或者說最核心的一部分。SQL92本身是分級的,包括入門級、過度級、中間級和完全級。爲了驗證具體的產品對標準的遵從程度,NIST還曾經專門發起了一個項目,來做標準符合程度的測試集合:http://itl.nist.gov/div897/ctg/sql_form.htm。不過,SQL標準包含的內容實在太多了,而且有很多特性對新的SQL產品而言也越來越不重要了。從SQL99之後,標準中符合程度的定義就不再分級,而是改成了核心兼容性和特性兼容性;也沒有機構來推出權威的SQL標準符合程度的測試認證了。


參考文獻:
http://www.ansi.org
http://www.iso.ch
http://sqlstandards.org
http://www.wiscorp.com
SQL99, SQL/MM, and SQLJ: An SQL99, SQL/MM, and SQLJ: An Overview of the SQL Overview of the SQL Standards
SQL:1999, Formerly known as SQL3
ISO/IEC 9075系列標準或其草案


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章