SQL标准

对很多公司来说,在选择关系数据库管理系统(RDMS)时SQL标准的兼容性无疑是一重要的考虑因素,那么,为什么这一标准对数据库产品的开发商而言反倒成了可选的考虑标准呢?其实专有技术在带来产品优势的同时往往还伴随着产品质量的下降或者数据移植性的丧失,对厂商和客户的关系而言,这些后果总是有得有失。下面就让我们探讨下ANSI SQL标准支持力度下降的原因以及标准自身的有效性。

为什么要建立标准?

  
为什么说技术标准相当重要?原因很多,最首要的一条就是产品的用户在购买产品之前能保证产品能达到它所宣称的功能。如果你能和某家厂商形成伙伴关系,保证你的数据管理系统一切正常,难道这样不好吗?再比如,你在选择RDMS的时候首先考虑的是其稳定、资源的有效利用率还是因为它支持竞争产品并不拥有的视图和事务功能呢?

有一个标准千般好,至少,第3方厂商能由此创建出可应用于整个市场而非某一特定平台的工具和实用程序。同样的,单一成品在通过标准认证的情况下更可以增加其可用资源的比重。产品认证有助于保证产品具有合格的质量和功能特性,反之,那些没有经过标准认证的“假冒品”到底能在多大程度上遵守标准规范就要大打折扣了!

针对产品的标准认证程序具有很多优点。然而,不幸的是,恰恰是SQL不具有能满足这一目标的标准控制体。

为什么标准没人听?

将近10年来,美国标准和技术研究所(NIST,该组织接受美国商务部的管理)一直负责提供RDMS的标准测试。6年前,NIST停止执行 ANSI/SQL标准的强制检测,他们认为,由于厂商缺乏标准兼容性的义务而令标准测试流于形式,标准本身在很大程度上被严重忽略了。

今天,大多数数据库开发商都宣称其产品遵守SQL-92标准,该标准于1992年发布。然而,当前的标准实际上已经发展到了SQL-99。NIST放弃对标准的控制原因在于: (1)数据库标准领域的范围太大。(2)由于财政上的原因,只有业内财大气粗的顶级RDMS开发商才有能力制定和实现标准。这两大因素在极大程度上促使具体的数据库产品背离了相关的标准,从而导致数据管理领域的技术混乱,而这却正是ANSI标准所试图防范的结果。

哎,这样一来还谈什么标准!

产品的一致性造就平庸

各类数据库开发商仅在不同程度上遵守ANSI/SQL标准,其目的无非是令他们的产品能具有更具竞争性的优势,同时满足客户的需求。不过,这些产品好歹还能说是遵守ANSI/SQL规范的。为了实现产品的兼容性和标准性,数据库产品基本上必须满足以下3个条件:

生产商必须创建可以设置的标志,通过它在用到非标准查询语句或者功能时可以产生有关的警告。
生产商必须明确地指出违背ANSI/SQL标准的函数属于产品本身的“扩展(extensions)”,并按照第1条所规定的那样提供标志特性。
数据库必须支持“Entry Level SQL92”,该标准版本由以下要素组成:表、列、数据类型、键索引、schema操作、行和表约束、视图、基本关系操作以及编程语言绑定等。
举个例子,我从Oracle产品下特有的SQL,也就是PL/SQL总结出以下并不遵守规范的技术扩展。

PL/SQL标志扩展:

数组接口包括FOR子句
SQLCA、ORACA和SQLDA数据结构
动态SQL包括DESCRIBE语句
嵌入式PL/SQL代码块
自动数据类型转换
DATE、COMP-3、NUMBER、RAW、LONG RAW、VARRAW、ROWID和VARCHAR数据类型
ORACLE OPTION语句用于指定运行时选项
用于用户退出的EXEC IAF和EXEC TOOLS语句
CONNECT语句
TYPE和VAR数据类型等价语句
AT db_name子句
DECLARE...DATABASE, ...STATEMENT和 ...TABLE语句
WHENEVER语句的SQLWARNING约束
WHENEVER语句的DO 和STOP行为
COMMIT语句中的COMMENT和FORCE TRANSACTION子句
ROLLBACK语句的FORCE TRANSACTION和TO SAVEPOINT子句
COMMIT和ROLLBACK语句的RELEASE参数
INTO子句中主机变量和WHENEVER...DO标签的Optional冒号前缀
我本来还想给大家提出一个针对MS SQL Server的查询语言Transact-SQL的类似兼容性列表,但我没有找到有关的ANSI/SQL标准兼容性说明文档。如果你想知道你在使用SQL Server时所用到的函数是否与标准相一致,你不妨利用 ‘set fipsflagger’选项显示警告信息。

我举出以上的例子是为了说明以下事实:虽然数据库开发商宣称自己的产品仍然处于ANSI RDMS标准的参数控制范围之内,但是,就算你达到了应用程序编程的技术水准,在没有综合考虑的情况下你也无法在不同类型的数据库产品之间顺利迁移。

标准失去了应有的意义。没有强制标准的执行部门,因而也不存在真正的标准产品。所谓的“遵守ANSI/SQL标准”不过是在市场销售时的一个漂亮口号而已。对数据库的应用或者应用程序的开发而言并没有太大的意义。

ANSI SQL建议

自1996年NIST的数据管理标准程序被放弃之后,现在已经没有什么认证或者其他机制能检验数据库厂商是否遵守了ANSI SQL标准。市场上的公众要求和主流产品都一个劲地只为保护客户投资的利益着想,生产商宁肯向客户提供更好的产品特性而不刻意追求产品的标准性,其情势宛如标准荡然无存。

我们只有两个选择:要不推出某种形式的标准强制执行系统,要不在某些违背标准的特性成为事实上的标准之前把SQL标准降格为某种产品建议。

 


SQL标准

  SQL是Structured Query Language的缩写,一般读作/`si:kju:/或“ess-que-el”,即字母“S”、“Q”、“L”的发音。作为一种访问关系型数据库的标准接口,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、Sybase、Informix、DB2、Ingres、 Microsoft SQL Server支持它,一些小型的产品如Visual Foxpro、Access等也支持SQL,很多开源的数据库产品PostgreSQL、MySQL、Firebird等也支持SQL。如果您是一个初学者,不妨到sqlcourse.com和sqlcourse2.com去练习一下,很快就能掌握最基本的SQL语句。

  蓝色巨人IBM对SQL语言的形成和规范化产生了重大的影响,著名的关系数据库原型系统System R就是IBM的研究成果,它就提供了初步的SQL语言,不过那时称为SEQUL2。Oracle在1979年率先推出了支持SQL的商用产品,当然,那时的Oracle并不好用。随着数据库技术和应用的发展,为各种不同的关系数据库系统提供一致的访问接口成了一种现实需要。

  对SQL标准影响最大的机构自然是那些著名的数据库产商,而具体的制订者则是一些所谓的非营利机构,例如ISO、ANSI等。各国通常会按照 ISO标准和ANSI标准(这两个东西的标准很多时候是差不多的)制定自己的国标,我国大致就是翻译一个对应的中文版,也许外加一点中国特色。其实标准这个东西本来就很难读,翻译成中文也往往是词不达意,对于学习者和数据库系统实现者而言,还不如直接读英文的好。另外,通常的标准都是要MONEY才能得到的,穷学生们要拜读一下还真是不容易。虽然正式的标准不像RFC那样可以轻易从网络上免费获得,标准草案还是比较容易找到的。想粗略的学习一下标准,有一个标准草案也可以了。

  下面是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(SQL4)
200N年,ISO/IEC 9075:200N, SQL:200N(SQL5)
    细心的读者能发现,从SQL:1999开始,标准简称中的短横线(-)被换成了冒号(:),而且标准制定的年份也改用四位数字了。前一个修改的原因是ISO标准习惯上采用冒号,ANSI标准则一直采用短横线。后一个修改的原因是标准的命名也遇到了2000年问题。

   从SQL:1999开始,SQL标准的个头就非常大了,其内容可以说是包罗万象,已经不仅仅限于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,其全名是:Joint Technical Committee ISO/IEC JTC 1, Information technology, Subcommittee SC 32, Data management and interchange。

  文章《Is SQL a Real Standard Anymore?》对SQL标准化进程提出了置疑?作者是:
    Michael M. Gorman - Whitemarsh Information Systems, Corp.
    Secretary - ANSI NCITS H2 Technical Committee on Database

参考文献:

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系列标准或其草案

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wwxtu24/archive/2008/12/28/3628490.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值