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

第20期:從SQL語法看離散性

企業動態
從離散性的解釋上可以知道,離散性是針對集合而言的一種能力,離開集合概念單獨談離散性就沒有意義了,但是SQL的離散性卻很差。

 

第20期:從SQL語法看離散性

 

所謂離散性,是指集合的成員可以游離在集合之外存在并參與運算,游離成員還可以再組成新的集合。從離散性的解釋上可以知道,離散性是針對集合而言的一種能力,離開集合概念單獨談離散性就沒有意義了。

離散性是個很簡單的特性,幾乎所有支持結構(對象)的高級語言都天然支持,比如我們用Java時都可以把數組成員取出來單獨計算,也可以再次組成新的數組進行集合運算(不過Java幾乎沒有提供集合運算類庫)。

但是SQL的離散性卻很差。

SQL體系中有記錄的概念,但并沒有顯式的記錄數據類型。單條記錄被SQL作為只有一條記錄的臨時表處理,也就是個單成員的集合。而且,SQL從表(集合)中取出記錄時總是復制出一條新記錄,和原表中的記錄已經沒有關系了,這個特性被稱為immutable。immutable特性有助于保證代碼的正確性和簡單性,但也會喪失離散性。

缺失離散性會帶來代碼的繁瑣和效率的低下。

比如要計算張三和李四的年齡差和工資差,SQL要寫成兩句:

  1. SELECT (SELECT age FROM employee WHERE name='張三') - ( SELECT age FROM employee WHERE name='李四') FROM dual 
  2. SELECT (SELECT salary FROM employee WHERE name='張三') - ( SELECT salary FROM employee WHERE name='李四') FROM dual 

這不僅書寫麻煩,而且要重復查詢。

如果支持較好的離散性,我們可以寫成這樣:

  1. a = employee.select@1(name="張三"
  2. b = employee.select@1(name="李四"
  3. aagediff=a.age-b.age 
  4. salarydiff=a.salary-b.salary 

查詢結果可以游離在集合外獨立存在,并可以反復使用。

immutable特性會要求每次運算都復制數據,這在只讀的運算中還只是浪費時間和空間影響效率,但如果要改寫數據時,造成的麻煩就嚴重得多。

比如我們想對業績在前10%銷售員再給予5%的獎勵。一個正常思路是先把業績在前10%的銷售員找出來,形成一個中間集合,然后再針對這個集合的成員執行獎勵5%的動作。但由于SQL缺乏離散性,immutable特性導致滿足條件的記錄再形成的集合和原記錄是無關的,在中間結果集上做修改沒有意義。這樣就迫使我們要把整個動作寫成一個語句,直接在原表中找到滿足條件的記錄再加以修改,而前10%這種條件并不容易簡單地在WHERE子句中寫出來,這又會導致復雜的子查詢。這還只是個簡單例子,現實應用中比這復雜的條件比比皆是,用子查詢也很難寫出,經常采用的辦法則是先把滿足條件的記錄的主鍵計算出來,再用這些主鍵到原表中遍歷找到原記錄去修改,代碼繁瑣且效率極為低下。

如果語言支持離散性,我們就可以執行上述思路了:

  1. a=sales.sort@z(amount).to(sales.len()*0.1)   //取出前業績在10%的記錄構成一個新集合 
  2. a.run(amountamount=amount*1.05)       //針對集合成員執行獎勵5%動作 

 

從上面兩個簡單例子可以看出,缺失離散性會加劇分步計算的困難,immutable特性會降低性能并占用空間。當然,離散性的問題還不止于此。

不能用原集合的成員構成新集合再進行計算,SQL在做分組時無法保持分組子集,必須強迫聚合,作為集合化語言,SQL的集合化并不徹底。沒有游離記錄及其集合的表示方法,只能用傳統的外鍵方案表示數據之間的關聯關系,寫出的代碼即繁瑣又難懂,而且運算性能還差,缺乏離散性的SQL無法采用直觀的引用機制描述關聯。特別地,沒有離散性的支持,SQL很難描述有序計算,有序計算是離散性和集合化的典型結合產物,成員的次序在集合中才有意義,這要求集合化,有序計算時又要將每個成員與相鄰成員區分開,會強調離散性。

這些具體內容我們會在后續文檔中逐步詳細說明。我們要從理論上改進SQL(或者更合適的說法是關系代數),主要工作就是在保持集合化的基礎上引入離散性,從而解決上述問題,讓新的語言能夠同時擁有SQL和Java的優點。

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

2017-08-16 15:31:31

SQL語法集合化

2017-08-09 16:13:48

SQL大數據語法

2018-03-14 07:47:41

大數據語法SQL

2017-09-13 08:45:33

遍歷SQL運算

2017-09-05 22:34:24

遍歷SQL運算

2018-01-10 15:25:43

JOIN維度SQL

2018-03-05 08:13:13

臨時性計算編程語言

2011-12-30 01:10:09

2014-01-13 17:12:38

IT技術周刊

2016-03-17 14:17:33

中國制造智造+V課堂

2017-08-02 17:00:51

SQL關系代數數據

2020-02-19 14:37:11

hashtagRediskey

2013-01-24 10:14:30

網絡·安全技術周刊

2021-06-16 10:48:28

區塊鏈貨幣技術

2018-03-24 12:21:21

58速運微服務架構智能云

2019-12-09 09:58:08

云計算AWS

2022-07-08 10:09:47

SPLSQL數據庫

2021-07-19 16:23:55

數據安全滴滴大數據

2017-05-03 22:26:39

數字化西門子集成

2023-08-03 10:25:49

Flutter
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲第一在线 | 狠狠婷婷综合久久久久久妖精 | 日韩三片 | 亚洲人a| 精品一区二区三区不卡 | 精品亚洲一区二区 | 免费天天干 | 午夜寂寞影院在线观看 | 黄色片网站在线观看 | av一级一片| 四虎影视一区二区 | 综合精品久久久 | 国内自拍视频在线观看 | 九九热免费在线观看 | av看看| 亚洲精品乱码8久久久久久日本 | 亚洲精品一区二区久 | 91精品国产一区二区三区蜜臀 | 国产第一页在线观看 | 日本一区二区三区在线观看 | av在线免费观看网站 | 三级成人在线 | www.天堂av.com| 自拍偷拍精品 | 久久久久久久久99 | 国产91丝袜在线播放 | 99在线免费观看视频 | 欧美久久国产 | 久久成人18免费网站 | 精品国产高清一区二区三区 | a在线观看 | 国内在线视频 | 91动漫在线观看 | 日韩精品久久久久 | 99精品久久久| 天天爽天天操 | 天天曰天天干 | 香蕉久久a毛片 | 国产在线一区二 | 天久久 | 国产在线一区二区 |