结构化查询语言/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 是将所有内容联系在一起的夹具,但通常会绕过官方语言进行很多迂回。