C
发贴: 0
积分: 0
|
于 2002-08-24 03:28
作者: BUILDER.COM 对很多公司来说,在选择关系数据库管理系统(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标准降格为某种产品建议。
|