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