1974年,图灵奖获得者查尔斯·巴赫曼参加一次数据库会议,遇到了埃德加·科德。
科德还没有图灵奖加身,但其关系数据库却如同一轮红日从东方升起,图灵奖是早晚的事儿。
一位是网状数据库的领袖,另外一位是关系数据库的旗手, 两位大宗师展开了一场火星撞地球般的论战。
对于现在的程序员来说,MySQL,Oracle等关系数据库是司空见惯的事情。
在数据库的课本上,几乎通篇介绍关系数据库, 层次数据库和网状数据库仅仅是作为数据库历史的一个小小的点缀。
但是在70年代,新生的关系数据库却饱受质疑。
因为当时大家都认为,程序员应该是数据结构的导航者, 程序员能在网状数据库中记住每条记录和其他记录之间的关系,然后通过“指针”在各条记录之间导航访问。
科德的想法完全不同:程序员不应该接触底层的物理结构。
应该有个更高层的、声明式的语言来访问数据,完全和数据库的底层数据存储方式隔离。
用声明式的语言来描述查询,那数据库能不能“聪明地”把它转化成底层的物理查询呢?
要知道,高级语言(如Fortran)的编译器,可是费了很大的劲才被开发出来。
1972年,IBM招兵买马,决定攻下这座山头。
IBM以科德所在的加州圣何塞研究院为中心,开发一套关系数据库的原型产品。
加入这个原型项目的有两个年轻的博士生,他们两个一起将会做出一个名垂青史的伟大贡献。
张伯伦和博伊斯都非常认可科德的关系模型。
觉得这个想法既简单又优美,只有一个缺点:太数学化了!
基于关系模型,科德提出的查询方案更加让人生畏。
张伯伦和博伊斯决定把数学部分给隐藏起来。
他们把关系称为表,然后把复杂的数学符号替换成简单的英语SELECT FROMWHERE, 这样普通人都能理解。
最终,晦涩的关系代数和关系演算变成了非专业人士都能理解的英语。
他俩把这门语言叫做 SEQUEL:Structured English Query Language ,既结构化的英语查询语言。
后来,由于SEQUEL已经是一家英国公司的商标,两人灵机一动,改名为更简单,更容易记忆的SQL
在当时,IBM还没有把SEQUL给产品化的想法,于是允许张伯伦和博伊斯把论文在一个技术会议上发表。
他们俩通过掷硬币的方式来确定谁去宣读论文,最后博伊斯赢了。
但不幸的是,会议之后仅仅一个月, 博伊斯便因为脑瘤去世,年仅27岁。
博伊斯的贡献还不仅仅是SQL,他和科德合作,建立了一个数据库课本上必讲的概念:BCNF范式。
痛失挚友的张伯伦继续前行,完成博伊斯的遗志。
他被任命为System R的技术经理,在System R中实现SQL, 同时用来证明关系数据库的能力:能不能胜任商业的事务处理。
于此同时,为了同一个目的, UC Berkeley也在开发一个叫做Ingres的关系数据库, 不过他们提出了一套自己的查询语言:QUEL
到了80年代, 计算机的价格持续下降,终于到了一个临界点:大量的公司都可以购买计算机和软件,把他们的纸质表格放到计算机中存储。
对数据库的需求开始激增, 由于“表”非常容易理解,开发基于关系数据库的程序变得简单,System R 和 Ingres 都获得了成功, 但是SQL和QUEL到底谁能一统江湖呢?
这时候,在科德所在的城市圣何塞,一个叫Larry的年轻人改变了天平的平衡。
Larry 立刻和他两个朋友一起成立了一个小公司,开发基于VAX小型机的关系数据库。
深受张伯伦和博伊斯论文影响的他自然选择了SQL。
1979年,Oracle正式问世,Larry凭借“关系”,成功地把数据库卖给了多个美国政府部门。
Oracle 在美国政府中的应用非常成功,以至于美国政府发布了一个联邦信息处理标准,指定在联邦数据库中要使用SQL,而不是别的查询语言!
你绝对想不到吧,现在恶名累累的Oracle居然对SQL的普及做过重大的贡献。
很快,SQL被ANSI, ISO等重磅机构采纳为正式标准。
得到官方认证的SQL击败了QUEL,成为了最终的胜利者。
到了90年代,连Ingres自己也放弃了QUEL ,开始拥抱SQL。
关系数据和SQL在八九十年代横扫市场,占据了主流。
科德于1983年获得图灵奖。张伯伦于1988年获得ACM 软件系统奖。
90年代后期,一个新的数据格式出现了:XML
XML非常火热,大家恨不得什么都要和XML扯上关系。
这种数据格式和关系数据库大相径庭,它也面对这样一个问题,如何从中进行查询。
张伯伦发挥自己的专长,为它定义了一套新的查询语言 XQuery。
但是时间证明,XML并没有成为广泛使用的数据存储格式, 所以XQuery也就没有像SQL那样被广泛使用。
SQL经过多年的发展,产生了广泛的影响力,成功地占据了广大程序员的心智。
很多产品为了降低学习成本,虽然底层不是关系数据库,也努力向SQL靠近,尤其是SELECT、FROM 、 WHERE、Order By、Group等核心概念。
SQL成了数据查询的王者。
直到有一天,有个叫NoSQL的家伙带着一帮小弟出现了。
NoSQL将会在下周和朋友们见面,敬请期待!