SQL到如今已經(jīng)誕生45年了,如今對(duì)SQL進(jìn)行投票,2019年11月份還是出于前10大編程語(yǔ)言之一。
編程語(yǔ)言排行榜
這對(duì)一門已經(jīng)上了年紀(jì)的“老語(yǔ)言”來(lái)說(shuō)是十分了不起的,但你知道sql是怎么誕生的嗎?
關(guān)于sql的誕生,我們不得不從計(jì)算機(jī)的誕生說(shuō)起。
世界上第一臺(tái)通用計(jì)算機(jī)“ENIAC”于1946年在美國(guó)賓夕法尼亞大學(xué)誕生,但是很多人不知道第一臺(tái)商用電腦的名字叫UNIVAC,1951交付于當(dāng)時(shí)的美國(guó)的人口普查局。
世界第一臺(tái)計(jì)算機(jī)
那時(shí)的數(shù)據(jù)管理非常簡(jiǎn)單。通過(guò)大量的分類、比較和表格繪制的機(jī)器運(yùn)行數(shù)百萬(wàn)穿孔卡片來(lái)進(jìn)行數(shù)據(jù)的處理,其運(yùn)行結(jié)果在紙上打印出來(lái)或者制成新的穿孔卡片。而數(shù)據(jù)管理就是對(duì)所有這些穿孔卡片進(jìn)行物理的儲(chǔ)存和處理。
穿孔卡片存儲(chǔ)
但這種存儲(chǔ)方式是在太笨重啦!數(shù)據(jù)量小而且查詢還不方便,因此最終這種方式被后出現(xiàn)的網(wǎng)狀數(shù)據(jù)庫(kù)(Network Databases)和層次數(shù)據(jù)庫(kù)(Hierarchical Databases)所取代。當(dāng)時(shí)網(wǎng)狀DBMS要比層次DBMS用得更普遍。在數(shù)據(jù)庫(kù)發(fā)展史上,網(wǎng)狀數(shù)據(jù)庫(kù)占有重要地位。
網(wǎng)狀數(shù)據(jù)庫(kù)模式
層次型數(shù)據(jù)庫(kù)
網(wǎng)狀數(shù)據(jù)庫(kù)與層級(jí)型數(shù)據(jù)庫(kù)均有其弊端,而且弊端從本質(zhì)上無(wú)法進(jìn)行優(yōu)化避免,其主要缺點(diǎn)如下:
網(wǎng)狀數(shù)據(jù)庫(kù)
(1)結(jié)構(gòu)比較復(fù)雜,而且隨著應(yīng)用環(huán)境的擴(kuò)大,數(shù)據(jù)庫(kù)的結(jié)構(gòu)就變得越來(lái)越復(fù)雜,不利于最終用戶掌握
(2)其DDL,DML語(yǔ)言復(fù)雜,用戶不容易使用。用于記錄之間聯(lián)系是通過(guò)存取路徑實(shí)現(xiàn)的,應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí)必須選擇適當(dāng)?shù)拇嫒÷窂。因此,用戶必須了解系統(tǒng)的結(jié)構(gòu)的細(xì)節(jié),加重了編寫應(yīng)用程序的負(fù)擔(dān)
層次型數(shù)據(jù)庫(kù)
(1)現(xiàn)實(shí)世界中很多聯(lián)系是非層次性的,如多對(duì)多聯(lián)系,一個(gè)節(jié)點(diǎn)具有多個(gè)雙親等,層次模型不能自然的表示這類聯(lián)系,只能通過(guò)引入冗余數(shù)據(jù)或引入虛擬結(jié)點(diǎn)來(lái)解決
(2)對(duì)插入和刪除操作的限制比較多
(3)查詢子女結(jié)點(diǎn)必須通過(guò)雙親結(jié)點(diǎn)
SQL的出現(xiàn)
1970 年,IBM研究員E.F.Codd博士在刊物Communication of the ACM上發(fā)表了一篇名為“A Relational Modelof Data for Large Shared Data Banks”的論文,提出了關(guān)系模型的概念,奠定了關(guān)系模型的理論基礎(chǔ)。
直到1985年IBM才發(fā)布了關(guān)系數(shù)據(jù)庫(kù)DB2,那時(shí)oracle已經(jīng)占有了很大的市場(chǎng),Ellision已經(jīng)成了千萬(wàn)富翁。1989年,微軟發(fā)布了SQL Server 1.0版。三大商用關(guān)系型數(shù)據(jù)庫(kù)的發(fā)布年份,也正好對(duì)應(yīng)了市場(chǎng)占有率的排名。
谷歌發(fā)布的 MapReduce (2004年)和 Bigtable(2006年),以及亞馬遜發(fā)布的Dynamo,這些開(kāi)創(chuàng)性的論文促使了更多非關(guān)系數(shù)據(jù)庫(kù)的出現(xiàn),包括 Hadoop、Cassandra和 MongoDB。這些新系統(tǒng)基本上都是從零開(kāi)始編寫的,他們并沒(méi)有使用SQL而是都開(kāi)發(fā)了自己的語(yǔ)言,這也就導(dǎo)致了 NoSQL 運(yùn)動(dòng)的興起。
不過(guò)SQL也不是出現(xiàn)后地位就波瀾不驚,其也受到過(guò)NoSQL的沖擊。
NoSQL跟SQL相比,因?yàn)椴僮骱?jiǎn)介,接受的群眾范圍更廣了。甚至有人認(rèn)為這是做項(xiàng)目時(shí)候通往成功的捷徑。但后來(lái)出現(xiàn)了問(wèn)題。
開(kāi)發(fā)人員很快發(fā)現(xiàn),沒(méi)有SQL實(shí)際上是非常有限的。。每個(gè)NoSQL數(shù)據(jù)庫(kù)都提供了自己獨(dú)特的查詢語(yǔ)言,這意味著:學(xué)習(xí)更多的語(yǔ)言(并在同事之間傳播知識(shí));增加了將數(shù)據(jù)庫(kù)連接到應(yīng)用程序的難度,導(dǎo)致代碼之間有很強(qiáng)的耦合性;缺乏第三方生態(tài)系統(tǒng),需要公司開(kāi)發(fā)自己的操作和可視化工具。
一些NoSQL數(shù)據(jù)庫(kù)添加了自己的“類sql”查詢語(yǔ)言,比如Cassandra的CQL。但使用起來(lái)效果并不好,往往其把開(kāi)發(fā)的難度又再次增加啦!這跟語(yǔ)言是解決問(wèn)題的工具的含義所違背。
因此sql憑借其在90%的情況中都能完成任務(wù)。這對(duì)于身處越來(lái)越復(fù)雜的技術(shù)與集成環(huán)境中的開(kāi)發(fā)者而言,就是最大的優(yōu)點(diǎn)。sql又再一次煥發(fā)新生啦!