成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

第32期:JOIN簡化 - 意義總結

企業動態
一個直接的效果顯然是讓語句書寫和理解更容易。外鍵屬性化、同維表等同化和主子表一體化方案直接消除了顯式的關聯運算,也更符合自然思維;維度對齊則可讓程序員不再關心表間關系,降低語句的復雜度。

【數據蔣堂】第32期:JOIN簡化 - 意義總結

我們重新審視和定義了等值JOIN運算,并簡化了語法。一個直接的效果顯然是讓語句書寫和理解更容易。外鍵屬性化、同維表等同化和主子表一體化方案直接消除了顯式的關聯運算,也更符合自然思維;維度對齊則可讓程序員不再關心表間關系,降低語句的復雜度。

簡化JOIN的好處不僅在于此,還能夠降低出錯率。

我們知道,SQL允許用WHERE來寫JOIN運算的過濾條件(回到原始的笛卡爾積式的定義),很多程序員也習慣于這么寫。當JOIN表只有兩三個的時候,那問題還不大,但如果JOIN表有七八個甚至十幾個的時候,漏寫一個JOIN條件是很有可能的。而漏寫了JOIN條件意味著將發生多對多的完全叉乘,而這個SQL卻可以正常執行,一方面計算結果會出錯(回憶一下以前說過的,發生多對多JOIN時,大概率是語句寫錯了),另一方面,如果漏寫條件的表很大,笛卡爾積的規模將是平方級的,這極有可能把數據庫直接“跑死”!

采用簡化后的JOIN語法,就不可能發生漏寫JOIN條件的情況了。因為對JOIN的理解不再是以笛卡爾積為基礎,而且設計這些語法時已經假定了多對多關聯沒有業務意義,這個規則下寫不出完全叉乘的運算。

對于多個子表分組后與主表對齊的運算,在SQL中要寫成多個子查詢的形式。但如果只有一個子表時,可以先JOIN再GROUP,這時不需要子查詢。有些程序員沒有仔細分析,會把這種寫法推廣到多個子表的情況,也先JOIN再GROUP,可以避免使用子查詢,但計算結果是錯誤的。

使用維度對齊的寫法就不容易發生這種錯誤了,無論多少個子表,都不需要子查詢,一個子表和多個子表的寫法完全相同。

重新看待JOIN運算,最關鍵的作用在于實現關聯查詢。

當前敏捷BI產品非常火熱,各家產品都宣稱能夠讓業務人員拖拖拽拽就完成想要的查詢報表。但實際應用效果會遠不如人意,業務人員仍然要經常求助于IT部門。造成這個現象的主要原因在于大多數業務查詢都是有過程的計算,不大可能由直接不會編程的業務人員獨立完成。但是,仍有約三成左右的業務查詢并不涉及多步過程,而業務人員仍然無法完成。

這是由于大多數敏捷BI產品(以及多年前流行的OLAP產品)都不支持關聯查詢。這些產品的工作模式是先由技術人員構建模型,再由業務人員基于模型在界面上進行查詢。而所謂建模,其實就是生成一個邏輯上或物理上的單表,業務人員只能在這個單表的范圍內查詢分析,無論界面做得多么流暢炫酷,在數據獲取層面都不可能超越這個事先構建好的單表范圍。用戶的查詢需求一旦超出了這個單表,需要關聯到其它表中數據時,就要由技術人員再次建模。建模實際上要針對不同的關聯需求分別實現,我們稱之為按需建模。但實際上,有意義的查詢絕大多數都有關聯需求,技術人員也不可能事先預測所有的關聯,就算預測了也不可能把所有的關聯可能性都事先做好。結果是,要么建模動作頻頻發生,要么業務用戶沒法使用,無論如何,這些敏捷BI產品都會失去敏捷性。

為什么這些BI產品不能支持關聯查詢呢?因為并不容易,其根源就在于SQL對JOIN的定義過于簡單,導致表間關聯過于繁瑣,超出業務人員的理解能力,直接把數據結構暴露出來由業務用戶自己完成JOIN運算是不可能的。有些BI產品的界面協助下有一些改善,在事先定義好維度后,可以讓業務人員正確處理沒有形成環的關聯關系以及同表內沒有相同維度的關聯情況,全自關聯(形成環)和同表多同維字段仍需要再建模去解決,這些細節我們也留到講述維度概念時來再詳細討論。

但是,如果改變了對JOIN運算的看法,關聯查詢可以從根本上得到解決。回憶前面講過的三種JOIN及其簡化手段,我們事實上把這幾種情況的多表關聯都看成了單表查詢,而業務用戶對于單表查詢并沒有理解障礙。無非就是表的屬性(字段)稍復雜了一些:可能有子屬性(外鍵字段指向的外鍵表),子屬性可能還有子屬性(多層的外鍵表),有些字段取值是集合而非單值(子表看作為主表的字段)。發生自關聯也不會影響理解(前面的例子就是個自關聯),同表有相同維度也不礙事(各自有各自的子屬性)。在這種關聯機制下,技術人員只要一次性把數據結構(元數據)定義好,在合適的界面下,由業務人員可以自己實現JOIN運算,不再需要技術人員的參與。數據建模只發生于數據結構改變的時刻,而不需要為新的關聯需求建模,這也就是非按需建模。

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-12-12 22:48:21

JOIN維度運算

2017-11-15 06:36:25

JOINSQL運算

2017-11-08 06:18:43

JOINSQL運算

2017-12-26 15:33:24

JOINSQL運算

2018-01-01 23:28:37

JOIN維度數據分析

2018-01-10 15:25:43

JOIN維度SQL

2018-01-10 15:19:59

JOIN維度SQL

2017-12-10 22:48:53

JOIN運算外鍵

2017-12-12 22:58:57

JOIN外鍵運算

2013-11-11 11:11:21

Linux運維趨勢電子雜志

2011-09-06 14:59:32

開發技術周刊

2017-10-09 22:33:56

SQL等值分組有序分組

2013-01-21 13:41:59

IBMdW

2011-10-21 15:23:38

網絡安全技術周刊

2012-01-10 09:10:03

百度技術沙龍數據挖掘

2016-08-08 10:55:20

2013-01-21 10:53:57

面試技術周刊

2018-01-18 20:47:18

CPU數據線程

2018-01-24 07:45:51

數據倍增分段列存

2017-09-13 08:45:33

遍歷SQL運算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩无| 精品久久久久一区二区国产 | 亚洲精品视频一区 | 国产91中文 | 日韩一区二区三区在线 | 日本精品视频一区二区 | 毛片网在线观看 | www日本在线播放 | 国产精品视频一二三区 | 7777久久| 欧美国产一区二区三区 | 日韩国产欧美在线观看 | 伊人久久伊人 | 一本色道精品久久一区二区三区 | 99re国产精品 | av一区二区三区四区 | 看真人视频一级毛片 | 日韩三级在线 | 欧美日韩在线免费 | 国产精品美女在线观看 | 国产精品一区二区三区久久久 | 国产精品入口久久 | 亚洲成人福利视频 | 日韩www | 亚洲一区二区三区免费视频 | 久久免费精品 | 日韩欧美国产一区二区 | 在线视频亚洲 | 综合色婷婷| 婷婷久久精品一区二区 | 久草热视频 | 国产精品日本一区二区在线播放 | 综合色婷婷 | 欧洲在线视频 | 免费性视频 | 欧美一二三四成人免费视频 | 日本a在线 | 国产精品1 | 999www视频免费观看 | 91久久婷婷| 国产精品一区二区三区99 |