结构化查询语言(Structured Query Language)
标准化的好处
像大多数其他标准一样,SQL的主要目的是实现可移植性。通常,软件设计师和应用程序开发人员在不同的层次上构建和解决问题。每个抽象层级在其自己的组件或子组件中实现:向最终用户展示、业务逻辑、数据访问、数据存储、网络和操作系统需求是此类组件的典型代表。它们组织成一个堆栈,每一层都为上层提供接口以使用其功能。如果这些组件中的一个由两个不同的提供商实现,并且都提供相同的接口(如API、Web服务、语言规范等),则可以在不更改基于它们的层的情况下更换它们。从本质上说,软件行业需要在关键层的顶层拥有稳定的接口,以避免对单一提供商的依赖。SQL作为关系数据库系统的这种接口。
如果一个应用程序仅使用标准SQL中定义的SQL命令,则应该可以在不更改应用程序源代码的情况下更换底层的rDBMS。然而在实践中,这是一项艰巨的任务,因为具体的实现提供了众多附加功能,且软件工程师喜欢使用它们。
第二个方面是知识的保留。如果一个学生学习SQL,他就有能力开发基于任意数据库系统的应用程序。这种情况与任何其他流行的编程语言相似。如果学习Java或C#,他可以开发运行在许多不同硬件系统甚至不同硬件架构上的各种应用程序。
局限性
数据库系统由许多组件组成。数据访问是一个重要的元素,但并不是唯一的组件。其他组件包括:吞吐量优化、物理设计、备份、分布式数据库、复制、24小时全年无休的可用性等。标准SQL主要关注数据访问,忽略了典型的DBA任务。即使是CREATE INDEX语句这一广泛使用的优化策略也不是标准的一部分。尽管如此,标准涵盖了数千页内容。但大多数DBA的日常工作高度依赖于每个具体实现,在切换到不同的rDBMS时必须以不同方式完成。主要受益的是应用程序开发人员。
标准化过程
标准化过程分为两个层级。第一层级在国家层面进行。一个国家内的相关公司、大学和个人在其国家标准化组织(如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 第二部分:基础(SQL/Foundation)——但它也包含了其他部分的一些特性。
注意:API JDBC是Java SE和Java EE的一部分,但不是SQL标准的一部分。
第二个密切相关的标准是ISO/IEC 13249-n:yyyy SQL多媒体和应用程序包,由相同的组织和委员会制定。该出版物定义了基于SQL的接口和包。它们专注于特定类型的应用程序:文本、图片、数据挖掘和空间数据应用程序。
标准符合性验证
直到1996年,国家标准与技术研究院(NIST)负责认证rDBMS的SQL实现是否符合SQL标准。随着NIST放弃了这项工作,现在供应商自行认证其产品的合规性。他们必须在文档的特别附录中声明符合程度。这些文档可能很庞大,因为标准不仅定义了一组基本特性——称为Core SQL:yyyy——还定义了大量附加特性,实施可能符合或不符合这些特性。
实现
为了满足客户的需求,所有主要的rDBMS供应商都在其产品中提供包括SQL在内的多种数据访问方式。实现涵盖了Core SQL、一堆附加的标准化特性以及大量未标准化的附加特性。对标准化特性的访问可能使用常规语法或实现特定的语法。从本质上讲,SQL是将一切绑定在一起的钳子,但通常存在许多绕过官方语言的捷径。