在软件开发领域,有20 到30 种流行的编程语言。但在数据库的世界里,只有一个。
半个世纪后,SQL 已从一粒小种子成长为关系数据库的主要查询语言。如今,它不仅支持政府、企业和全球经济的关键交易,而且是数据库世界的绝对统治者。但这一切的背后却是一个惊人的故事。
名字的秘密
SQL是Structured Query Language的缩写,最初称为SEQUEL。这可能是对当代竞争语言QUEL 的致敬。
IBM 的Donald Chamberlin 和Raymond Boyce 在1974 年发表了论文《SEQUEL:一种结构化的英语查询语言》,目标是解决IBM 新提出的System R 系统中的数据查询问题。 System R 是第一个体现Edgar Codd 论文中描述的关系模型的数据库。
张伯伦表示,科德的方法与当时流行的数据系统思维非常不同,需要一种全新的语言来支持它。
“当时数据库行业的领军人物是查尔斯·巴赫曼(Charles Bachman),他在通用电气工作,发明了数据库系统作为操作系统和应用程序之间的独立软件层,创建了一个集成的数据存储,并且“我们开发了一个特定的数据库系统称为``张伯林说。
巴赫曼的发明被称为网格数据库,但它对行业没有产生持久的影响。
“查理认为他可以编写一个程序来教计算机如何访问数据库并找到答案。科德说,“不,这应该是自动计算的。” “那是在20 世纪70 年代初,行业内存在激烈的争论,”Chamberlin 说。
SQUARE 语言:听起来很花哨,但打字却非常困难。
在第一次尝试为关系数据库创建语言时,Chamberlin 和Raymond Boyce 创造了术语SQUARE,即“关系环境中的指定查询”。然而,这依赖于下标和上标的复杂组合,张伯伦本人也承认这很难打字。
1973 年,Chamberlin 和Boyce 从东海岸搬到IBM 的圣何塞研究中心,加入System R 团队。
“关系模型简单、优雅且强大。但是Codd 用许多数学术语表达了他的概念。他主要是一名数学家,当我们第一次阅读他的论文时,我不知道这个概念有多么优雅和通用。他做了一个另一个问题是,这个想法是否被有效地落实到了项目中。“一开始我们并不清楚是否会获得绩效,”张伯伦说。
另一个数据库团队正在解决同样的问题
System R 是IBM 试图证明关系模型实际上可以在当时可用的计算机上运行的尝试,但正如Codd 的论文发表在期刊上一样,IBM 团队并不是唯一解决这个问题的团队。旧金山附近的加州大学伯克利分校的另一个团队正在开展类似的项目。
“实现关系数据库需要三件事。它就像一个三足凳。我们有一个数据模型。第二,你不需要成为数学专家才能理解它。第三件事是一个优化处理器,可以把它变成现实。”将高级语言转化为高性能程序,这就是IBM 和伯克利的人们正在致力于的事情,计算成本正在下降,关系数据库是这场数据革命的赢家。有危险。”
问题是选择哪一种以及使用哪种语言。
20 世纪70 年代初,在伯克利,博士后研究员Michael Stonebraker 和计算机科学家Eugene Wong 开始了一个项目,在System R 的同时构建另一个早期关系数据库Ingres。为此,他们开发了自己的查询语言QUEL。
“Chamberlin 和Boyce 基本上将SQUARE 变成了一种可键盘语言,但具有嵌套结构,”Stonebraker 解释道。
SQL:一个不太标准的标准
尽管SQL 在数据库市场上占据绝对主导地位并得到国际标准化组织的支持,但SQL 性能在不同的实施过程中存在巨大差异。
卡内基梅隆大学数据库科学副教授Andy Pavlo 解释说,SQL 的强大之处在于它能够吸收多年来尝试取代它的最佳想法。
“SQL 之所以如此具有弹性,是因为它能够采纳最好的想法并将其整合起来。典型的例子包括20 世纪80 年代和1990 年代的面向对象数据库,以及最近的文档存储。MongoDB 诞生于2000 年代末,然后SQL 添加了2016 年将支持JSON,”他说。
然而,对广泛用于在全球互联网上交换数据的JSON 数据类型的支持暴露了SQL 并不像许多人想象的那样标准化的问题。
Pavlo 表示,JSON 于2016 年成为SQL 标准的一部分,但PostgreSQL 自2012 年起就支持JSON。 Oracle 和MySQL 也有自己的JSON 支持变体。
“这就像试图找到最低公分母并说,‘这应该是标准’,而每个人都在做自己的事情。通常,一些数据库有自己的版本。有一些实现它们的方法,并且作为新的变体操作的增加和SQL 标准的出现,它们不会返回并改变,”Pablo 说。
这意味着不同的供应商有不同版本的SQL,这可能会给开发人员和数据库管理员带来问题。例如,微软有T-SQL,Oracle有PL/SQL,PostgreSQL有PL/pgSQL。
尽管如此,编写好的SQL 还是有一些规则的。
开源数据库咨询公司Percona 的创始人兼前首席执行官Peter Zaitsev 表示,SQL 非常适合表达简单的需求,但在更高级的情况下,即使是一个人的数学思维也可能会“令人畏惧”。
“在我的工作中,我有时会看到生成长达五页的SQL 查询的程序。在这种情况下,几乎不可能用它们做任何事情。“这很困难,而且很难调试,需要大量的开发人员。努力,”他说。
“SQL 查询就像句子。您不希望它们只有两个单词或五页长。使用属于单个想法的表达式。
“我的建议是明智地使用SQL,但不要太多。人们试图在SQL 中放入太多应用程序逻辑,而维护它并不容易,”Zaitsev 说道。
最佳技术解决方案获胜了吗?
但是,某些查询无法使用嵌套表示法来表达。因此,SEQUEL 在嵌套表示中添加了平面表示,使语言“不必要地复杂”,Stonebraker 说。
“另一方面,QUEL 一开始就使用平面表示。没有嵌套表示。SEQUEL 因包含嵌套表示而受到阻碍。但问题是,一旦放入,就无法将其取出你不能这么做,”碎石说道。
另一方面,SEQUEL(SQL 命名法后来出现)的优越性绝非是确定的。 IBM 最初对将System R 开发为商业产品兴趣不大。因为System R 从现有的数据系统中赚取了巨额利润。
张伯伦解释说: “这对我和System R 团队的其他成员来说绝对是一个挫折。这是IBM 做出的商业决策。他们的商业数据库产品[tier] 取得了成功。结构化IMS] 他们为什么要推出竞争产品?他们花了好几年才弄清楚。
“与此同时,System R 小组在开放技术文献中发表了有关SQL 和编译器优化的论文,IBM 非常慷慨地允许我们这样做,因为他们并没有真正从业务角度考虑这一点: “技术:这就是研究,”张伯伦说。
Oracle的诞生与小型机的兴起
然而,有两家公司对创建商业关系数据库感兴趣。除了Stonebraker 的Ingres 之外,由Larry Ellison、Bob Miner 和Ed Oates 创立的初创公司Software Development Laboratories 也开发了Oracle 数据库,后来以Oracle 的名字命名。
Stonebraker 表示,虽然Oracle 采用了SEQUEL 并声称它是第一个商用关系系统,但Ingres 比IBM 具有显着优势。两者都是为小型计算机系统开发的,与20 世纪60 年代和1970 年代流行的大型机有很大不同。
数据库先驱英年早逝,但他的代码永存
20 世纪70 年代初,Raymond Boyce 与IBM 的Donald Chamberlin 一起工作时共同开发了SQL,但他从未亲眼目睹SQL 在世界上大多数数据库中得到应用。他20多岁时因脑动脉瘤突然去世,留下妻子和年幼的女儿。
他毕业于普罗维登斯学院,获得印第安纳州普渡大学计算机科学博士学位,在纽约加入IBM 后结识了Chamberlin,并于1972 年一起搬到圣何塞,在System R 团队工作。
但他不仅仅是张伯伦的同事。
“Ray 是我最好的朋友。我们一起搬到了加州,一起买了房子,一起拼车,第一次分配到项目时就一起工作。和Ray 一起工作很有趣。我们以前玩过一个叫做查询的东西游戏中,我们每个人都创建了一个查询,并互相挑战以找到表达它的语法。”张伯伦先生说。
“专业合作取得了巨大成功。我仍然与雷的女儿保持联系,雷去世时她才一岁,现在已经50 岁了。我们每年夏天仍然一起去露营。“我要去,”张伯伦说。
“在20 世纪80 年代初期到中期,主要数据库系统都在IBM 硬件上运行,这对两家公司来说都是一个巨大的优势,但在20 世纪80 年代,小型计算机的兴起为Oracle 和Ingres 创造了一个利基市场。”
他表示Ingres对Quel的实现比Oracle对SQL的采用要好得多。斯通布雷克表示,甲骨文起步较早,并通过“我不同意的销售策略”实现了显着增长。但他表示,如果没有IBM 的干预,Ingres 可能会在1985 年超越Oracle。
1983年底,IBM推出了Db2。虽然它不是第一个商业关系数据库,但它很快成为新先锋的旗舰产品。 Db2 使用SQL,并且由于IBM 主导了大型机市场,因此竞争语言的游戏已经结束,无论它们在技术上是否优越。
标准机构和政府采购决策
但对于Chamberlin 来说,国家标准机构和美国政府采购机构的批准帮助SQL 成为了赢家。
随着Ingres 和Oracle 的成功,关系数据库变得越来越流行,美国国家标准协会(ANSI) 决定对查询语言产生兴趣并进行研究。
“嗯,他们有一个名为H2 的委员会,其中有来自各个软件供应商的代表,其中包括当时销售SQL 产品的IBM 和Oracle。重要的是,Ingres 的人“如果Angle 先生是该委员会的**,那么世界可能会有所不同,”他说。
相反,ANSI 委员会在市场上看到了两种关系型产品,都使用SQL 并且兼容,因此如果该产品基于商业上可用的SQL 实现作为标准,Chamberlin 表示他认为它将获得最多的关注。
与此同时,美国政府发布了联邦信息处理标准127。 “如果你想向政府出售软件,就必须通过该标准。FIPS 127 与ANSI 标准完全相同。从向政府出售SQL 系统的角度来看,它非常有利,”Chamberlin 说。
遵循ANSI 标准,国际标准化组织(ISO) 于1986 年制定了SQL 标准。最新的2023 年更新包括与JSON 和属性图相关的新功能。既然SQL 的全球统治地位已得到保证,Chamberlin 回顾了他的团队本可以采取哪些不同的做法。他说,那些认为SQL 不是“正交”(即一个操作只能改变一件事)的观点的人是有道理的。
然而,创建SQL 的目的并不是创建一种编程语言,而是创建一种非程序员(例如业务分析师)可以用来操作数据的方法。
“我们希望使语言尽可能接近自然语言,以便可以像英语文本一样阅读和理解它。但是,当然,英语不是一种‘正交’语言,因此,在以下方面做出了一些妥协:那个方面。很高兴见到你,”他说。
最终,SQL 主要由程序员、数据库管理员和数据科学家使用。 “从长远来看,稍微强调让语言变得更加‘正交’会更有利,”他说。
尽管SQL 取得了成功,Chamberlin 认为需要NoSQL 数据库和语言来满足现代应用程序的数据需求。然而,现有关系数据库的数据量巨大,再加上MySQL、PostgreSQL和SQLite等开源关系数据库的流行,使得SQL不太可能被取代。
尽管无言以对,Stonebraker 表示数据库行业已经从拥有统一的、广泛接受的SQL 标准中受益。
“除非关系数据库由于某种原因不再流行,否则我认为现在没有任何东西可以取代它们,但我认为这种情况不会发生。”它可能能够编译,但它只是添加了“另一个方面”。结束它吧,”他说。
“在软件开发领域,有20 到30 种流行的编程语言。在数据库领域,只有一种。”
参考:
https://www.theregister.com/2024/05/31/fifty_years_of_sql/?td=rt-4a
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。