你對SQL的認識可能是錯的
Lukas Eder是 jOOQ 母公司 Data Geekery GmbH 的創建者兼首席執行官。關于SQL,他經常聽到一些錯誤的觀點,比如:
SQL已經老化。我們為什么不使用更現代的技術?
像匯編一樣,SQL是低級語言。你是喜歡使用匯編還是Java呢?類似地,你是喜歡使用SQL還是Hibernate呢?
</div>近日,他發表了一篇 博文 ,逐一反駁了類似的偏見和謬論。
謬論1:SQL已經老化
Lukas 認為,許多人之所以認為SQL已經老化,是因為它是一項已經超過了30年的ISO/IEC標準,而且是以更為古老的關系代數學為基礎。但他指出,知名網站 Use The Index, Luke 的作者 Markus Winand 已經很好地 展示 了SQL這些年的發展。 現代SQL 已經可以做許多超出通用編程語言開發人員意料的事。
謬論2:SQL是低級語言
Lukas 并不認為SQL是同匯編一樣的低級語言。相反,他認為SQL是主流語言中最高級的,因為SQL是唯一 真正 流行的 第四代編程語言 。而且,SQL還是唯一真正流行的聲明式編程語言。使用SQL,只需要告訴機器需要什么數據,如何獲取這些數據則由查詢分析器完成。
謬論3:NoSQL更現代
“NoSQL比SQL更現代”, Lukas 認為,這是NoSQL數據庫供應商的宣傳之詞。他指出,如果(層次化)的JSON數據存儲就是現代的話,那么SQL并不落后。許多關系型數據庫提供商都已經集成了JSON。而且,即使是對半結構化數據而言,SQL仍然是最好的查詢和數據批處理語言。實際上,SQL就是針對SQL出現之前的混亂而設計的。關于這一點,感興趣的讀者可以閱讀《 Codd的關系型觀點——NoSQL兜了個圈又回到了原點? 》。現如今,許多大數據數據庫提供商都押寶SQL作為查詢語言, Mark Madsen已經在Strata Conf大會上做了很好地展示 。
謬論4:數據庫不適合編寫業務邏輯
在Lukas看來,這是最大的謬論,因為事實正好相反,數據庫是進行統計運算的最佳之處。它有許多信息可以幫助運算,而且是在內存中進行。它還有約束、索引和其它各種元數據來幫助優化查詢。這種優化使用純Java代碼可能是無法實現的。另外,這種方法還有一個巨大的優勢,就是業務邏輯在一個地方實現,卻可以供多個應用程序使用。
此外, Lukas 還以窗口函數為例說明了SQL的簡潔性,并指出,窗口函數及其它許多很棒的SQL特性自 SQL:2003 起已經實現標準化,使用這些特性,無需擔心被數據庫供應商鎖定。
最后,Lukas總結道:
- SQL能做的事比你知道的要多許多;
- SQL比許多其它技術都要先進得多;
- SQL是實現業務邏輯的理想之地。