关系代数诞生于1969年,甲骨文诞生于1978年。这期间的历史很漫长,所以本系列文章等甲骨文上场起码还有好几个章节。
由于历史都比较久远,在我出生前,查史料非常的辛苦,这个系列写的很慢。
我这个标题暴露了我具体想要讲啥。而且我相信有无数多人不同意我的观点。但是没办法, 我是做数据库系统的,我对SQL的崇拜有如滔滔江水,绵绵不绝。再加上我是写文章的,自然是我想用什么标题就用什么标题了。
IBM对祖师爷Edgar Frank Codd的关系模型的态度很暧昧:不拒绝,不反对,但是也不给钱做系统。现在回头去看究其原因是怕影响了自己已经有的IMS这个层次模型数据库的钱。
但是,Codd也是一个非常顽强的人,他就去找IBM的大客户,给大客户们洗脑说关系数据库才是未来,层次是过去。大客户们被洗的都信了关系代数神教以后就回头找IBM,说赶紧给爸爸们做一个关系数据库出来。
IBM不怕Codd,但是经不住客户金主爸爸们反复要求,就在自己的Future System里加了一个新的研究对象:System R。Future System项目是IBM1970年前后开展的一个大型研究项目,为的是开发出革命性的新软件和硬件。当时如日中天的IBM可谓浩浩荡荡的撒钱。
System R是数据库历史上有标志性意义的一个系统。我们以后还要专门讲到它。System R团队成立于1973年。里面包括了后来很多在数据库圈里声名显赫的人,包括后来的图灵奖获得者Jim Gray。当然,也不知道IBM怎么想的,IBM把System R团队和Codd给隔离开来了。
1974年的时候,Donald Chamberlin和Raymond Boyce发表了一篇论文:SEQUEL: A structured English query language。为了给大家看看这篇论文怎么样,我特意去ACM的数据库里搜了一下,截图如下:
那为什么SEQUEL变成为SQL了呢?是因为IBM发现原来SEQUEL居然是英国一家公司的注册商标,于是就只好改了。再后来,IBM为了和Ingres竞争(以后会讲),抢先把SQL提交给标准委员会。于是SQL的全称也偷偷的换成了Standard Query Language---一个更为霸气的名字。
我想这个世界上大部分计算机程序员,DBA,数据科学家,数据工程师等等,多多少少都会写点SQL查询:SELECT ... FROM ... WHERE...。SQL诞生于1974年,又被如此广泛应用,所以我还是觉得它是全世界最牛逼的语言。
Codd在提出关系模型的时候,论文里有一个查询语言叫Alpha。但是因为和System R的人员隔离,对方又发明了SQL。到底是Alpha好还是SQL好呢?
历史上另外一个图灵奖获得者Michael Stonebraker在他的系统Ingres里使用了类似Alpha的查询语言,所以有人觉得IBM再发吗SQL是傻逼行为。
才写了三篇文章,已经跳出来三个未来的图灵奖获得者了。数据库领域一共有四个图灵奖获得者,他们先后都会反复出现在这个系列里。
从我个人的看法来说,SQL这个语言入门简单,但是如果想要写复杂的查询,那就是天堑一样的鸿沟。所以这样的语言是不是设计合理是见仁见智的。
但是SQL有一个问题,它和关系代数是不一致的。它的SELECT是关系代数里面的的PROJECT。关系代数里面的SELECT是它的WHERE 和HAVING。如此的不一致性,对初学者是困惑。
SQL还继承了关系代数最大的一个坑:NULL。简单来说关系代数是三元关系:TRUE, FALSE, NULL。而不是常见的两元关系。这里引入NULL之后带来一系列复杂的规则变化,是SQL最大的坑之一。
作为一个做数据库的人,如果没有因为修NULL相关的bug而苦思不得其解的话,作为一个用数据库的人,如果不清楚NULL有多坑人的话,都是不合格的。
Raymond Boyce发表完论文的当年就因为动脉瘤去世了。Donald Chamberlin则独享了SQL的荣光。他因为SQL获奖无数,成为了ACM fellow, IEEE fellow,IBM fellow,美国工程院院士等。我在2008年去IBM实习的时候见到了Donald,当时从照片看到真人的时候,真有跪了的冲动。这是活宝啊。
——————————————
往期精彩: