天天看點

談談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的手冊而來的。可惜ibm起先并沒有什麼産品化的想法,倒是oracle在1979年率先推出了支援sql的商用産品。随着資料庫技術和應用的發展,為各種不同的關系資料庫系統提供一緻的語言成了一種現實需要。

  對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/iec 9075-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标準化程序提出了置疑。