27歲發(fā)明SQL以后,上帝把他帶走了
1974年,圖靈獎(jiǎng)獲得者查爾斯·巴赫曼參加一次數(shù)據(jù)庫(kù)會(huì)議,遇到了埃德加·科德。
科德還沒(méi)有圖靈獎(jiǎng)加身,但其關(guān)系數(shù)據(jù)庫(kù)卻如同一輪紅日從東方升起,圖靈獎(jiǎng)是早晚的事兒。
一位是網(wǎng)狀數(shù)據(jù)庫(kù)的領(lǐng)袖,另外一位是關(guān)系數(shù)據(jù)庫(kù)的旗手, 兩位大宗師展開了一場(chǎng)火星撞地球般的論戰(zhàn)。
對(duì)于現(xiàn)在的程序員來(lái)說(shuō),MySQL,Oracle等關(guān)系數(shù)據(jù)庫(kù)是司空見慣的事情。
在數(shù)據(jù)庫(kù)的課本上,幾乎通篇介紹關(guān)系數(shù)據(jù)庫(kù), 層次數(shù)據(jù)庫(kù)和網(wǎng)狀數(shù)據(jù)庫(kù)僅僅是作為數(shù)據(jù)庫(kù)歷史的一個(gè)小小的點(diǎn)綴。
但是在70年代,新生的關(guān)系數(shù)據(jù)庫(kù)卻飽受質(zhì)疑。
因?yàn)楫?dāng)時(shí)大家都認(rèn)為,程序員應(yīng)該是數(shù)據(jù)結(jié)構(gòu)的導(dǎo)航者, 程序員能在網(wǎng)狀數(shù)據(jù)庫(kù)中記住每條記錄和其他記錄之間的關(guān)系,然后通過(guò)“指針”在各條記錄之間導(dǎo)航訪問(wèn)。
科德的想法完全不同:程序員不應(yīng)該接觸底層的物理結(jié)構(gòu)。
應(yīng)該有個(gè)更高層的、聲明式的語(yǔ)言來(lái)訪問(wèn)數(shù)據(jù),完全和數(shù)據(jù)庫(kù)的底層數(shù)據(jù)存儲(chǔ)方式隔離。
用聲明式的語(yǔ)言來(lái)描述查詢,那數(shù)據(jù)庫(kù)能不能“聰明地”把它轉(zhuǎn)化成底層的物理查詢呢?
要知道,高級(jí)語(yǔ)言(如Fortran)的編譯器,可是費(fèi)了很大的勁才被開發(fā)出來(lái)。
1972年,IBM招兵買馬,決定攻下這座山頭。
IBM以科德所在的加州圣何塞研究院為中心,開發(fā)一套關(guān)系數(shù)據(jù)庫(kù)的原型產(chǎn)品。
加入這個(gè)原型項(xiàng)目的有兩個(gè)年輕的博士生,他們兩個(gè)一起將會(huì)做出一個(gè)名垂青史的偉大貢獻(xiàn)。
張伯倫和博伊斯都非常認(rèn)可科德的關(guān)系模型。
覺得這個(gè)想法既簡(jiǎn)單又優(yōu)美,只有一個(gè)缺點(diǎn):太數(shù)學(xué)化了!
基于關(guān)系模型,科德提出的查詢方案更加讓人生畏。
張伯倫和博伊斯決定把數(shù)學(xué)部分給隱藏起來(lái)。
他們把關(guān)系稱為表,然后把復(fù)雜的數(shù)學(xué)符號(hào)替換成簡(jiǎn)單的英語(yǔ)SELECT FROMWHERE, 這樣普通人都能理解。
最終,晦澀的關(guān)系代數(shù)和關(guān)系演算變成了非專業(yè)人士都能理解的英語(yǔ)。
他倆把這門語(yǔ)言叫做 SEQUEL:Structured English Query Language ,既結(jié)構(gòu)化的英語(yǔ)查詢語(yǔ)言。
后來(lái),由于SEQUEL已經(jīng)是一家英國(guó)公司的商標(biāo),兩人靈機(jī)一動(dòng),改名為更簡(jiǎn)單,更容易記憶的SQL
在當(dāng)時(shí),IBM還沒(méi)有把SEQUL給產(chǎn)品化的想法,于是允許張伯倫和博伊斯把論文在一個(gè)技術(shù)會(huì)議上發(fā)表。
他們倆通過(guò)擲硬幣的方式來(lái)確定誰(shuí)去宣讀論文,最后博伊斯贏了。
但不幸的是,會(huì)議之后僅僅一個(gè)月, 博伊斯便因?yàn)槟X瘤去世,年僅27歲。
博伊斯的貢獻(xiàn)還不僅僅是SQL,他和科德合作,建立了一個(gè)數(shù)據(jù)庫(kù)課本上必講的概念:BCNF范式。
痛失摯友的張伯倫繼續(xù)前行,完成博伊斯的遺志。
他被任命為System R的技術(shù)經(jīng)理,在System R中實(shí)現(xiàn)SQL, 同時(shí)用來(lái)證明關(guān)系數(shù)據(jù)庫(kù)的能力:能不能勝任商業(yè)的事務(wù)處理。
于此同時(shí),為了同一個(gè)目的, UC Berkeley也在開發(fā)一個(gè)叫做Ingres的關(guān)系數(shù)據(jù)庫(kù), 不過(guò)他們提出了一套自己的查詢語(yǔ)言:QUEL
到了80年代, 計(jì)算機(jī)的價(jià)格持續(xù)下降,終于到了一個(gè)臨界點(diǎn):大量的公司都可以購(gòu)買計(jì)算機(jī)和軟件,把他們的紙質(zhì)表格放到計(jì)算機(jī)中存儲(chǔ)。
對(duì)數(shù)據(jù)庫(kù)的需求開始激增, 由于“表”非常容易理解,開發(fā)基于關(guān)系數(shù)據(jù)庫(kù)的程序變得簡(jiǎn)單,System R 和 Ingres 都獲得了成功, 但是SQL和QUEL到底誰(shuí)能一統(tǒng)江湖呢?
這時(shí)候,在科德所在的城市圣何塞,一個(gè)叫Larry的年輕人改變了天平的平衡。
Larry 立刻和他兩個(gè)朋友一起成立了一個(gè)小公司,開發(fā)基于VAX小型機(jī)的關(guān)系數(shù)據(jù)庫(kù)。
深受張伯倫和博伊斯論文影響的他自然選擇了SQL。
1979年,Oracle正式問(wèn)世,Larry憑借“關(guān)系”,成功地把數(shù)據(jù)庫(kù)賣給了多個(gè)美國(guó)政府部門。
Oracle 在美國(guó)政府中的應(yīng)用非常成功,以至于美國(guó)政府發(fā)布了一個(gè)聯(lián)邦信息處理標(biāo)準(zhǔn),指定在聯(lián)邦數(shù)據(jù)庫(kù)中要使用SQL,而不是別的查詢語(yǔ)言!
你絕對(duì)想不到吧,現(xiàn)在惡名累累的Oracle居然對(duì)SQL的普及做過(guò)重大的貢獻(xiàn)。
很快,SQL被ANSI, ISO等重磅機(jī)構(gòu)采納為正式標(biāo)準(zhǔn)。
得到官方認(rèn)證的SQL擊敗了QUEL,成為了最終的勝利者。
到了90年代,連Ingres自己也放棄了QUEL ,開始擁抱SQL。
關(guān)系數(shù)據(jù)和SQL在八九十年代橫掃市場(chǎng),占據(jù)了主流。
科德于1983年獲得圖靈獎(jiǎng)。張伯倫于1988年獲得ACM 軟件系統(tǒng)獎(jiǎng)。
90年代后期,一個(gè)新的數(shù)據(jù)格式出現(xiàn)了:XML
XML非?;馃?,大家恨不得什么都要和XML扯上關(guān)系。
這種數(shù)據(jù)格式和關(guān)系數(shù)據(jù)庫(kù)大相徑庭,它也面對(duì)這樣一個(gè)問(wèn)題,如何從中進(jìn)行查詢。
張伯倫發(fā)揮自己的專長(zhǎng),為它定義了一套新的查詢語(yǔ)言 XQuery。
但是時(shí)間證明,XML并沒(méi)有成為廣泛使用的數(shù)據(jù)存儲(chǔ)格式, 所以XQuery也就沒(méi)有像SQL那樣被廣泛使用。
SQL經(jīng)過(guò)多年的發(fā)展,產(chǎn)生了廣泛的影響力,成功地占據(jù)了廣大程序員的心智。
很多產(chǎn)品為了降低學(xué)習(xí)成本,雖然底層不是關(guān)系數(shù)據(jù)庫(kù),也努力向SQL靠近,尤其是SELECT、FROM 、 WHERE、Order By、Group等核心概念。
SQL成了數(shù)據(jù)查詢的王者。
直到有一天,有個(gè)叫NoSQL的家伙帶著一幫小弟出現(xiàn)了。
NoSQL將會(huì)在下周和朋友們見面,敬請(qǐng)期待!