您好,登錄后才能下訂單哦!
這篇文章主要介紹“SQL的重要性有哪些”,在日常操作中,相信很多人在SQL的重要性有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL的重要性有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1971年3月,英特爾公司推出了世界上第一個通用微處理器,即英特爾4004,它有2300個晶體管,售價60美元。將時間快進50年左右,最新的蘋果手機有將近120億個晶體管(可惜比60美元更貴一些)。
直至90年代,許多我們目前使用的編程語言才被引入(Java是1996年引入的)。然而,有一種編程語言50年前就被引入,但熱度仍然不減當年,那就是SQL。
1962年,查爾斯·W·巴赫曼(Charles W.Bachman)(與硅谷的埃里希·巴赫曼[ErlichBachman]非親)是通用電氣公司一個小團隊的成員。一年后,巴赫曼的團隊推出了集成數(shù)據(jù)儲存系統(tǒng)(IDS),該系統(tǒng)后來被公認為首個數(shù)據(jù)庫管理系統(tǒng)。
10年后,巴赫曼獲得了眾人向往不已的圖靈獎,也稱為計算機科學領(lǐng)域的諾貝爾獎,以此表彰他對IDS計算的貢獻。
20世紀60年代初,計算機科學才剛剛開始成為一個學術(shù)領(lǐng)域。在這樣的大背景下,美國信息交換標準代碼(ASCII)直到1963年才被引入。要想理解IDS,我們得先了解促進其發(fā)展的兩個主要動力:
磁盤存儲器的引入
向高水平編程的轉(zhuǎn)變
圖:工人正在搬動一臺RAMAC305
1956年,IBM推出了第一個商用硬盤驅(qū)動器——RAMAC 305。磁盤驅(qū)動器的引入,使程序員能直接跳轉(zhuǎn)到磁盤的某個位置來檢索和更新數(shù)據(jù)。相比它的前身磁帶驅(qū)動器,這是一個巨大的進步,后者需要在磁帶中順序移動來檢索一個特定片段的數(shù)據(jù)。
但目前開發(fā)者必須找出磁盤上存儲記錄的位置。由于早期操作系統(tǒng)中的文件管理系統(tǒng)具有局限性,這是一項只有經(jīng)驗豐富的程序員才能完成的高級任務。開發(fā)者需要一個解決方案,以簡化磁盤驅(qū)動器的運作。
與此同時,在采用曲線上,計算機科學開始從創(chuàng)新者向早期采用者轉(zhuǎn)變。像Assembly這樣的低級編程語言在早期學術(shù)領(lǐng)域內(nèi)很流行,但普通程序員會轉(zhuǎn)而使用更高級的編程語言,如COBOL,因為其更易使用。
什么是IDS?IDS解決了磁盤存儲和高級編程問題,允許開發(fā)者使用COBOL之類的高級編程語言,以此來構(gòu)建應用程序,從磁盤存儲中輸入及檢索數(shù)據(jù)。由于這個功能,IDS成為了第一個數(shù)據(jù)庫管理系統(tǒng)。
1969年,數(shù)據(jù)系統(tǒng)語言委員會(CODASYL)發(fā)布了一份報告,提出了一個數(shù)據(jù)庫管理的標準。巴赫曼是該委員會的一員,且該報告大量引用了IDS。
CODASYL數(shù)據(jù)模型引入了許多如今數(shù)據(jù)庫管理系統(tǒng)的核心特性:
模式數(shù)據(jù)定義語言(DDL)
數(shù)據(jù)操作語言(DML)
最重要的是,IDS和CODASYL引入了一種新的數(shù)據(jù)建模方法,這種方法影響了SQL的最終開發(fā),即網(wǎng)絡數(shù)據(jù)模型。
圖:網(wǎng)絡模型范例
數(shù)據(jù)模型是用于描述(模擬)世界(數(shù)據(jù))的標準方法。
從前的分層數(shù)據(jù)模型使用樹狀結(jié)構(gòu)來描述數(shù)據(jù),但其僅限于一對多的關(guān)系。新的網(wǎng)絡模型允許子記錄有多個父記錄,從而創(chuàng)建一個圖形結(jié)構(gòu)。通過允許多個父記錄,網(wǎng)絡模型能對多對一和多對多的關(guān)系進行建模。
在網(wǎng)絡模型中,表之間的關(guān)系存儲于集合中。每個集合都有一個所有者(即教師)和一個或多個成員(即班級和學生)。
網(wǎng)絡模型的一個關(guān)鍵優(yōu)勢是,集合中的相關(guān)記錄是通過指針直接連接的。集合是通過next,prior,以及owner指針實現(xiàn)的,能像鏈表一樣方便遍歷。
網(wǎng)絡數(shù)據(jù)模型的底層特性提供了性能上的益處,但這是有代價的。網(wǎng)絡數(shù)據(jù)模型增加了存儲成本,因為每條記錄都必須存儲額外指針,這些指針指向先前的記錄和父記錄。
圖:關(guān)系模型的范例
1970年,在IDS之后的8年, 埃德加· F· 科德(Edgar F. Codd)在他的開創(chuàng)性論文《大型共享數(shù)據(jù)庫的數(shù)據(jù)關(guān)系模型》中引入了關(guān)系模型(這篇論文也讓他和巴赫曼一樣,成為了圖靈獎得主)。
科德表明,數(shù)據(jù)庫里所有的數(shù)據(jù)都能用元組(SQL中的行)表示,這些元組被分組為關(guān)系(SQL中的表)。為了描述數(shù)據(jù)庫查詢,他發(fā)明了一階謂語邏輯的形式,叫元組關(guān)系演算。
元組關(guān)系演算引入了一種用于查詢數(shù)據(jù)的聲明式語言。聲明式編程語言使程序員可以在不描述“如何做”的情況下,直接說出他們“想做什么”。
這種新的聲明式語言對開發(fā)者來說更容易使用。關(guān)系模型公開展示了所有數(shù)據(jù)。開發(fā)者能從表中檢索所有數(shù)據(jù),或在單個命令中讀取單個行(多虧查詢優(yōu)化器)。跟著指針迷宮尋找數(shù)據(jù)的日子已經(jīng)一去不復返了。
通過規(guī)范數(shù)據(jù),關(guān)系數(shù)據(jù)庫能降低網(wǎng)絡數(shù)據(jù)庫的高存儲成本。規(guī)范化是一個分解表以消除冗余的過程,從而減少數(shù)據(jù)占用的磁盤空間。
然而,關(guān)系數(shù)據(jù)庫增加了CPU成本。為了運行規(guī)范化數(shù)據(jù),關(guān)系數(shù)據(jù)庫必須將表加載到內(nèi)存中,并使用計算能力將表“連接”在一起。讓我們通過一個關(guān)系模型來完成為某個特定教師找到所有班級和學生這一過程。
數(shù)據(jù)庫系統(tǒng)首先會執(zhí)行一個操作來檢索所有相關(guān)的班級。接著,它的第二步操作就是檢索學生數(shù)據(jù)。所有的數(shù)據(jù)都會被存儲到內(nèi)存中,在返還結(jié)果前,它會進行第三步操作來合并數(shù)據(jù)。
關(guān)系模型和網(wǎng)絡模型性能對比圖
在使用真實數(shù)據(jù)的性能案例研究中,雷瑪數(shù)據(jù)管理公司(Raima)發(fā)現(xiàn),網(wǎng)絡數(shù)據(jù)庫模型的插入性能優(yōu)于實際數(shù)據(jù)23倍,且查詢數(shù)據(jù)的速度比實際數(shù)據(jù)快123倍。
所以,為什么關(guān)系數(shù)據(jù)庫會成為領(lǐng)先的數(shù)據(jù)庫解決方案呢?
易用性
關(guān)系模型能更加靈活地應對變化,而且它的聲明句法簡化了程序員的工作。摩爾定律在其背后發(fā)揮著神奇的作用。計算成本持續(xù)降低,最終,關(guān)系模型中增加的計算成本與生產(chǎn)力提高所帶來的收益相抵消。時間再快進50年,如今,數(shù)據(jù)中心最昂貴的資源就是CPU。
SQL時代的崛起
在科德的文章發(fā)表4年后,唐納德·張伯倫(Donald Chamberlin)和雷蒙德·博伊斯(Raymond Boyce)發(fā)表了《SEQUEL:結(jié)構(gòu)化英語查詢語言》。
他們將SEQUEL描述為“一組在一階謂語演算冪上的…關(guān)于表格結(jié)構(gòu)的簡單操作”。IBM發(fā)現(xiàn)了這種潛力,并在20世紀70年代初迅速開發(fā)了第一版SEQUEL,作為其System R項目的一部分。
后來之所以更名為SQL,是因為與英國供應商霍克西德利飛機公司(Hawker Siddeley)存在商標糾紛。SQL的下一次飛躍是在近十年后了。1986年,美國國家標準協(xié)會(ANSI)和國際標準化組織(ISO)發(fā)布了第一個官方的SQL標準:SQL-86。該標準將SQL分割成以下幾個部分:
數(shù)據(jù)定義語言(DDL):用于定義和修改模式和關(guān)系的命令。
數(shù)據(jù)操作語言(DML):用于從數(shù)據(jù)庫中查詢、插入和刪除信息的命令。
事務控制:指定事務時間的命令。
完整性:在數(shù)據(jù)庫信息中設(shè)置約束的命令。
視圖:用于定義視圖的命令。
權(quán)限:指定用戶訪問的命令
嵌入式SQL:指定如何在其他語言中嵌入SQL的命令。
1974年至今,無數(shù)競爭者試圖從占統(tǒng)治地位的查詢語言SQL手中奪取市場份額。這些新的句法通常針對特定的新技術(shù):
Lisp -> CLSQL.NET -> LINQRuby on Rails -> ActiveRecord
35年之后,SQL仍然在數(shù)據(jù)庫中無所不在。它是如何保持其作為查詢語言的統(tǒng)治地位的,我們又能從它的故事中學到什么?
圖:2017年堆棧溢出開發(fā)者調(diào)查
我們從巴赫曼引入第一個數(shù)據(jù)庫管理系統(tǒng)IDS講起,討論了從磁盤存儲向高級編程轉(zhuǎn)變,催生了對處理數(shù)據(jù)新方法的需求。接著迎來了CODASYL和標準化數(shù)據(jù)庫管理。IDS和CODASYL引入了新的網(wǎng)絡數(shù)據(jù)模型。最終,科德放棄了關(guān)系模型。這一切發(fā)展用了超過8年的時間。
SQL是如何成功在后來的50年間保持流行的?我認為有4個主要原因:
建立在基本原則之上
基本原則是一個基本命題,不能從其他任何命題或假設(shè)中推導出來。例如,將碳氫化合物和氧氣結(jié)合,產(chǎn)生化學反應,這仍然是驅(qū)動每輛汽車內(nèi)燃機的原理。
1970年,科德創(chuàng)造了新的數(shù)據(jù)庫基本原則:元組關(guān)系演算。這個新邏輯的創(chuàng)建產(chǎn)生了關(guān)系模型,之后引出了SQL。元組關(guān)系演算就是化學反應,關(guān)系模型就是內(nèi)燃機,而SQL就是汽車。
布什內(nèi)爾定理
僅僅建立在基本原則的基礎(chǔ)上不能保證成功。Assembly是程序員能做出的最接近1和0的程序,但仍然被COBOL(以及后來的C)所取代,其中缺失的成分就是易用性。
無獨有偶,在從網(wǎng)絡模型到關(guān)系模型的轉(zhuǎn)變中,網(wǎng)絡模型性能更好,但如今每家公司都在使用關(guān)系數(shù)據(jù)庫,因為它更容易(上手)。
Assembly不僅精通難,入門也很難。SQL在二者之間達到了完美的平衡。通過10個左右的SQL命令,任何人都能學會20%,然后進階到80%,但要想成為一名大師,需要經(jīng)過長期的索引、視圖和優(yōu)化過程。
傾聽和適應
查詢語言不是永恒的單一語言,而是一組與時俱進的適應性標準。SQL標準一直在隨時間進行調(diào)整,并吸收來自用戶的反饋。
從最初的概念以來,我們已經(jīng)看到了10種不同的SQL標準,每種都做出了重要的改變。以下是其中的3大更新:
1.SQL:1999:添加了正則表達式匹配、遞歸查詢(如傳遞閉包)、觸發(fā)器、對過程語句和流控制語句的支持、非標量類型(數(shù)組)和一些面向?qū)ο筇匦?如結(jié)構(gòu)化類型)。支持在Java中嵌入SQL(SQL/OLB),反之亦然(SQL/JRT)。
2.SQL:2003:引入了與XML相關(guān)的特性(SQL/XML)、窗口函數(shù)、標準化序列和自動生成值的列(包括標識列)。
3.SQL:2016:增加行模式匹配、多態(tài)表函數(shù)、JSON。
SQL還展示了創(chuàng)造軌道的能力,且其他產(chǎn)品都建立在該軌道之上。SQL沒有需要強制執(zhí)行的語法,而是為每個數(shù)據(jù)庫提供一個標準,讓其完成自我實現(xiàn)(T-SQL, MySQL, PSQL, etc)。
API的采用
SQL成功的最后一個秘訣,是應用程序編程接口(API)的興起。API通過抽象底層操作簡化了編程,只公開開發(fā)人員需要的對象或操作。API使SQL得以使用特定句法來持續(xù)適應新科技。
2006年,Hadoop引入了分布式文件系統(tǒng)(HDFS),起初SQL句法無法訪問該系統(tǒng)。然而到了2013年,Apache創(chuàng)建了Apache Impala,使開發(fā)者可以使用SQL來查詢HDFS數(shù)據(jù)庫。
SQL是如今最普遍使用的編程語言之一,我們不該忘記它悠久的歷史。它的旅程始于現(xiàn)代計算的黎明,在兩位圖靈獎得主的努力下煥發(fā)生機。
到此,關(guān)于“SQL的重要性有哪些”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。