帝國的黃昏(2):SQL是世界上最牛逼的語言

2019-05-25 04:09:23

關係代數誕生於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的資料庫裡搜了一下,截圖如下:


帝國的黃昏(2):SQL是世界上最牛逼的語言


那為什麼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,當時從照片看到真人的時候,真有跪了的衝動。這是活寶啊。


在看



熱點新聞