深扒SQL的歷史,說點秘密給你聽

  • 2019 年 11 月 12 日
  • 筆記

01,本文導讀

很多學SQL的朋友,或正在用SQL的朋友,都感覺到害怕,最近興起的大數據,NoSQL會不會終結了SQL的命運,這幫只會SQL的朋友,怎麼辦?想學吧,又沒精力,不學吧,提高不了自己,不能升職加薪!

想要徹底看懂局勢,還得從兩家的歷史談起,今天就先談談SQL的起家史。

02,IBM時代

說起關係型數據庫,始終離不開IBM,更離不開那篇論文。

帶讀 IBM 關係型數據庫經典論文

「IBM為啥能出這麼牛的論文呢,不就是個賣服務器的奸商嘛!」說這番話的同學,你可以先坐下了。當時IBM有個很牛的研究院,叫做 Waston Research Center. 凡是有研究院的公司,都很牛逼,是不是?你看,微軟研究院,SAP 研究院,十八摸(IBM, 18M很像,對不對?)研究院等等,還有國內的BAT研究院,華為研究院,聯想研究院,小米研究院等等。

所以,沒畢業的同學在選未來公司的時候,可得看準咯,有自己研究院的廠子肯定差不了,至少技術上是有發展方向的。

那這些研究院都在研究哪些吊炸天的技術呢?他們都要996嘛?

說實話996了我也未必看懂他們在幹嘛:

嗯怎麼樣,懵不懵?反正當時我看了,多虧昕姐扶好我才坐穩。照這麼玩法,我還是玩裝機,繼續當我的網管去了。別說我慫,說出來不信,當時全世界也就一個人能玩懂這套理論,那就是 Ted Codd, 而且他老人家也是50多歲了,才搞的這套玩法。

Edgar Frank "Ted" Codd (19 August 1923 – 18 April 2003) was an English computer scientist who, while working for IBM, invented the relational model for database management, the theoretical basis for relational databases and relational database management systems. https://en.wikipedia.org/wiki/Edgar_F._Codd

Codd 比 Code 排名稍前,所以名字就決定了他不可能發明 Code. 他的傑出貢獻就是關係模型(Relational Model). 老爺子沒有發明 Code, 要不是他覺得 Code 不夠 Fashion ,不能代表他高深莫測的地位,這種神器怎麼能發明出來給大眾使用呢?要不就是像乾隆一樣,流芳百世的功績也要留點給後人嘛!

所以他只留下兩把鑰匙,開啟 SQL 的兩把鑰匙:

關係代數(Relational Algebra)

關係演算(Relational Calculas)

沒錯,上面的兩段天書代表了這兩個理論:

如果你看懂了,什麼 BAT,FLAG,達摩十八摸,放開了膽子走進去。保證你Offer拿到手軟!

如果看不懂,也不急,我用SQL給你解釋下:

怎麼樣,這下懂了吧?!什麼,你才學SQL兩天,竟然就可以把天才 Codd 的理論這麼給打發了,那麼以後維護世界和平的任務就交給你咯。

這說明個什麼問題?毛爺爺曾教導我們,任何革命運動的勝利都離不開群眾基礎。群眾需要什麼,讓人犯困的數學公式,枯燥單一的格式符?都不是我們的菜,一把「漢陽造」六五的983,或者計三八式362便可,有空場地練練手就能上了!

SQL 就是這麼個好玩意兒。你快則練個 2 天,慢則一星期,上面的 SQL 絕對可以拿下。

吃水不忘挖井人,這麼好用的東西,得感謝這兩位:Ray Boyce 和 Donald D. Chamberlin. 年輕人嘛,總是對世界充滿了好奇。喜歡用 Code 去改變世界,也熱衷幻想跟自己的偶像一起工作。當他們得知 Codd 前輩在關係模型方向的研究之後,天天追他的文章,看他的博客,入他的知識星球,已經到了狂樂的地步。只要有面基的機會,那是一定不會放過,終於有一天,在 Codd 大叔上台演講的時候,逮到一個好機會,表達自己的仰慕之情。

Codd 一看,哦,還有年輕人對我這糟老頭子的研究感興趣,趕緊請進家來,好酒好菜招待着,後繼有人,衣缽可託了。兩剛畢業的孩子看到這一幕,那還得了。伯樂啊,吃了你的飯,喝了你的酒,一定替你過五關斬六將。

996,我估計那是007,不到兩年光景,SQL 就被發明出來了。不僅如此,Boyce 還加了道菜,那就是我們SQL人常掛嘴邊的 BCNF, Boyce-Codd normal Form, 第三範式。如果你經常被你的技術經理調侃,三範式沒學好,記得別怪 Boyce,因為小博還沒有來得及修正三範式,就很不幸的因為動脈瘤去了。是的,留下的三範式,大多數人沒有再突破。下次破壞三範式設計的時候,記得跟小博說聲對不起。畢竟我們吃軟飯的工具,是他26歲留給我們的,寫完就見上帝去了,我們寫SQL的人都欠他一個道別。

小博我們是真無法感謝了,但是搭檔錢柏林(Donald Chamberlin)還在。老爺子最近一次亮相是在2009年的計算機歷史博物館,當時被授予年度人物獎。他的一生貢獻可就大了,SQL, XQuery, System R, 因此獲獎也無數。

03, 狼煙四起,群雄逐鹿

System R 在 IBM 這麼多牛人的努力下,終於上了三個實驗站點,卻沒想到一票走紅,Oracle, DB2, SQL Server 也就跟着起來了。

那為什麼 System R 沒有成為 IBM 的當紅產品,而讓 DB2 搶了風頭呢?Oracle 僅憑拉里一人,又怎麼稱霸世界了呢?別急,聽我慢慢道來。

小時候我們都在糾結一個事情:雞是怎麼來的?生來就是雞,還是雞蛋孵出來的。有小朋友說是其他動物變異來的,也有小朋友說是某種蛋遇到合適的環境和溫度,就出來了現在像雞一樣的動物。

System R 置於整個 SQL 數據庫界的地位,就是雞置於整個雞族史的地位。那是第一代關係型數據庫,第一次完整的實現了SQL語言來控制數據庫。其他的 Oracle, DB2, MS SQL Server 那都是不聽話的,有想法的小弟。每個小弟憑着自己的看家本領都自立門戶了,且還都混得不錯。

為了英雄,為了聯盟…

說啥呢,為了SQL

先說 DB2 吧,與 System R 本是同根生。由於 System R 本身是實驗性質的產物,並沒有考慮太多商業化的因素,總是被各類二道販子罵街。一會兒操作系統不兼容,一會兒SQL總有些不夠聽話,IBM一看這可不得了啊,即使批量生產起來了,後期口碑也要撲街啊。所以狠了狠心,把 System R放在自己研究員里當擺設了,繼而發明了第一代的商業產品,並且把難以馴服的SEQUEL,改成了苗條版的SQL.

可能是當時太急於掙錢了吧,IBM針對每個操作系統開發了不同版本的 DB2, 比如 DB2 For System z 和 DB2 For System i 是不同的,因此連接兩套數據庫的驅動也不一樣。哎呀尼瑪,傻子都看得出來,這得多要命,作為客戶來講,簡直是搶錢哇。就像某土豪一樣,家用Windows, 商用 Mac, 結果 Office 要收你2份錢,你干不幹?當然土豪的回答,肯定是干。

但是 IBM 內部首先就吃不消了。這10年下來,第一代的SQL程序員都不會玩最新版的 DB2 了,真要出了問題要誰維護去。成本極高,所以IBM又做了一次調整,將所有的DB2版本都整成一份,不論Windows,Linux,Unix都一統。客戶開心了,成本低了;公司開心了,研發成本降低了;傷心的只有那些35歲以上的中年男,嗯,被裁了….. 兄弟來口二鍋頭,不在深夜2(two,吐)過的DB(男人)不成熟

中年被裁,最慘的某過於老婆也跟着跑了。提起 Oracle,就不得不說他的創始人拉里(Larry Ellison),就是中年跑了老婆的這位。32歲的拉里比起39歲才創業的劉邦,要好的多啦。都是從零開始,都是看到大人物的風騷開始自嗨。一個是看着秦始皇,發出「生當如此」的感慨;一個是看着《A Relational Model of Data for Large Shared Data Banks》論文,連連誇口「卧槽,牛皮牛皮,我也要發明這玩意兒」

但困難是擺在面前的,IBM要商業化,要吃飯啊,所以具體實現的編碼怎麼可能放出來呢,哪像現在這些 github上的開源項目,你要你拿走,我行我來賣。所以我說我們是最好的時代。拉里幾次嘗試破譯無果之後,立馬找來了幫手 Bob Miner和 Ed Oates, 成立了 Software Development Laboratories. 這麼土的名字誰記得住,等到產品編譯出來,立馬大筆一揮,Oracle 便橫空出世了。這一出世,可不得了,絢爛紅長期霸榜數據庫排行榜第一位。

再說說 Larry 的小老婆,哎,人家過得挺好的

接下來出場的是最年輕的小弟,SQL Server. 前兩位大佬都是70後,而 SQL Server 是正宗的80後,還是個85後,沾點90後的嫩勁兒。1988年,微軟和 Ashton-Tate 合作開發 Sybase SQL Server for IBM OS/2. 次年, SQL Server 1.0 就被微軟給出版了。可以看出,其實 SQL Server 是有點非 Windows 的血統的,只是當年 IBM與微軟分道揚鑣後,OS/2 歸了 IBM, SQL Server就被微軟給收了。微軟拿了 SQL Server 之後,統一了版權,且把它綁定在了 Windows 服務器上,這一綁世界上就多了一個剛從大學畢業的我,畢業那年我23.(其實和我沒啥關係)在經歷了23年與 Linux主流陣營分居之後,SQL Server 2017 終於又回歸了大家庭。

所以微軟這套 SQL Server 其實沒啥好說的,就是從人家 Sybase 手裡脫胎而來的,Sybase 現在還有很多公司用着呢,看到這類數據庫的你,不要方,你的T-SQL水平照樣可以 hold 住 Sybase.

04, 到底和我啥關係

「小編,你說了那麼多,到底跟我有半毛錢的關係沒?」「你不讚賞,當然跟你沒半毛錢關係咯….」等等,這位同學,你的板磚先放一放。我再跟你捋一捋。

首先,數據庫世家出自 IBM, 最初始的模型是 System R. 所以理論基礎你要先看會,也就是我開頭提到的那篇論文。熟讀那篇論文,才能抓住數據庫設計和開發的本質,說不定你也能弄一套數據庫出來,賺兩酒錢,弄不好還能去納思達闊敲鐘。

你說不想敲鐘,在辦公室點個卯,平淡過一生,你真的好好看 IBM DB2 那段故事了么,你真覺得能安心點卯過一輩子?資本的本質是什麼?骯髒的毛細血鬼,他放過誰!

那麼你說整天 CRUD, 能有出息嘛!那小博和唐納爾德大叔的故事,你又沒仔細看咯。你眼前的一切都是你生來都有的嘛,明顯 iPhone11就不是嘛。但你說,iPhone11沒有iPhone4那麼驚艷了,那我問你,免費送你一部iPhon11和Mi 9, 你要哪個撒?(別,我不是你四川老鄉,先別套近乎!)

好產品都是磨出來的,也就是碎片時間你一直在琢磨,磨着磨着就出貨了。