專利名稱::一種數(shù)據(jù)處理方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計算機(jī)信息處理
技術(shù)領(lǐng)域:
,具體涉及一種數(shù)據(jù)處理方法。
背景技術(shù):
:當(dāng)前的商務(wù)應(yīng)用中針對關(guān)系數(shù)據(jù)庫中大量數(shù)據(jù)信息的組織、管理方法,主要基于其上的查詢與訪問語言SQL技術(shù),由于其數(shù)據(jù)結(jié)構(gòu)被限制于表的形式以及SQL非過程性等特點(diǎn),在處理很多復(fù)雜關(guān)系的計算時會十分煩瑣且效率低下。SQL刻意弱化記錄的順序,強(qiáng)調(diào)數(shù)據(jù)的無序和平等性,這是SQL的一個特色,但也帶來了一些不可避免的缺陷。由于數(shù)據(jù)的無序性,在一些涉及到記錄順序的計算中,例如本次記錄與上次記錄的比較(同期比)這種計算,就每次都必須先手動對表進(jìn)行排序,步驟冗余、操作繁瑣而且效率低下。SQL沒有集合運(yùn)算這一方便直觀的概念。例如現(xiàn)有"北京地區(qū)員工"和"銷售員工"表,如果想得到"北京地區(qū)銷售員工"表,并不能像人們直觀理解的取交集的方法直接運(yùn)算,所有交、并、和、差等集合操作,SQL都必須通過表間的條件關(guān)聯(lián)操作實(shí)現(xiàn),在這個需求中,就需要用SELECT語句加WHERE條件來做兩張表的關(guān)聯(lián)查詢,步驟繁瑣而且邏輯不易被普通業(yè)務(wù)人員理解。SQL不使用指針操作,其大部分的數(shù)據(jù)操作,都是通過批量復(fù)制數(shù)據(jù)實(shí)現(xiàn)。例如所有的SELECT查詢所得出的表,都是把來源表中的數(shù)據(jù)計算后全部復(fù)制出來而生成新表。例如現(xiàn)在需要將"員工個人信息表"與"員工銷售情況表"關(guān)聯(lián)起來,以查閱員工的銷售情況,SELECT查詢只能將關(guān)聯(lián)后的數(shù)據(jù)全部都復(fù)制出來生成一個龐大的新表。不支持指針操作將導(dǎo)致它的數(shù)據(jù)操作效率低下,并且會占用大量的存儲空間,而且也導(dǎo)致它無法實(shí)現(xiàn)真正意義上的集合運(yùn)算,也限制了它工作的自由度,例如它不可能將子表直接保存在主表的字段之內(nèi)。SQL強(qiáng)調(diào)只用一個語句就完成查詢,再復(fù)雜的查詢條件,也要在一個長SELECT語句中完成。這導(dǎo)致在一些復(fù)雜的多表關(guān)聯(lián)查詢情況下,所有的關(guān)聯(lián)、分組和篩選等都必須一次性考慮完成,從而導(dǎo)致這個語句往往會很難寫,在實(shí)際應(yīng)用中,甚至?xí)龅綆醉摷堥L的一條SELECT語句,對這種情況,非專業(yè)人員很難處理,而SQL對于很難或無法在一個語句內(nèi)完成的運(yùn)算,則必須手動創(chuàng)建臨時表來保存中間數(shù)據(jù),不僅操作復(fù)雜,而且這種表都是批量復(fù)制數(shù)據(jù)生成的,效率低下且浪費(fèi)資源。
發(fā)明內(nèi)容針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的是提供一種新的數(shù)據(jù)處理方法,以便提高大量數(shù)據(jù)處理和管理的便利程度和靈活性。為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是,一種數(shù)據(jù)處理方法,包括如下步驟(1)創(chuàng)建排列和記錄的本體;(2)按需要引用常量、變量、排列、記錄組成有序的序列;(3)對排列、序列和記錄進(jìn)行運(yùn)算和處理,直至得到需求的結(jié)果;在運(yùn)算和處理過程中,所有涉及到排列、序列和記錄的操作和引用,除創(chuàng)建副本操作外,都使用指針進(jìn)行引用。進(jìn)一步,如上所述的一種數(shù)據(jù)處理方法,在步驟(1)中,所述的排列是一種有序的成員列,排列中的成員為記錄,記錄的字段為數(shù)據(jù),數(shù)據(jù)是任意的類型,包括是另一個記錄、排列或序列。進(jìn)一步,如上所述的一種數(shù)據(jù)處理方法,在步驟(1)中,所述的排列和記錄既能夠從現(xiàn)有數(shù)據(jù)創(chuàng)建,也能夠從關(guān)系數(shù)據(jù)庫導(dǎo)入。進(jìn)一步,如上所述的一種數(shù)據(jù)處理方法,在步驟(1)中,所述的記錄的本體保存在排列中,任何一條記錄必然屬于排列,記錄最初只能通過排列的成員調(diào)用。進(jìn)一步,如上所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(2)中,所述的序列是一種數(shù)據(jù)結(jié)構(gòu),為有序的成員列,其成員是任意的類型,包括是另一個記錄、排列或序列。進(jìn)一步,如上所述的一種數(shù)據(jù)處理方法,在步驟(3)中,所述的每個排列、序列和記錄只存儲一個本體,變量內(nèi)、字段內(nèi)或序列的成員內(nèi)的引用都只存儲目標(biāo)記錄、排列或序列的地址;對排列、序列和記錄進(jìn)行的運(yùn)算和處理的結(jié)果仍能夠用于下一步的運(yùn)算和處理。本發(fā)明的有益效果在于本發(fā)明所述的方法讓用戶可以在高層的數(shù)據(jù)結(jié)構(gòu)和操作接口上工作,而無需接觸底層的數(shù)據(jù)存儲細(xì)節(jié),并且該操作接口具有靈活的數(shù)據(jù)結(jié)構(gòu)和強(qiáng)大自由的運(yùn)算系統(tǒng),能使用戶更加方便高效的管理數(shù)據(jù)。具體來說,采用本發(fā)明所述的方法具有以下優(yōu)點(diǎn)(1)以記錄為基本單元管理數(shù)據(jù)不同于關(guān)系數(shù)據(jù)庫中以表為基本單元管理數(shù)據(jù),本方法使用更為基本的記錄為基本單元管理數(shù)據(jù),這使得數(shù)據(jù)的組織和管理更為靈活和自由,配合序列結(jié)構(gòu),為后面自由分組以及強(qiáng)大的運(yùn)算系統(tǒng)提供了基礎(chǔ)。(2)數(shù)據(jù)有序不同于SQL對順序的淡化,本方法在最底層的序列和排列的定義中就強(qiáng)調(diào)順序的有意義性。從而可以非常容易的實(shí)現(xiàn)許多與順序相關(guān)的操作和比較,序號也使得許多其他運(yùn)算變得更容易實(shí)現(xiàn),并有更高的運(yùn)算速度。(3)自由的記錄和序列結(jié)構(gòu)由于記錄和序列結(jié)構(gòu)的自由性,以及指針引用的支持,方法中允許記錄的字段直接是引用的另一個記錄,甚至另一個序列/排列,例如可以將企業(yè)的"研發(fā)部人員表"直接賦值到"部門表"中"研發(fā)部"記錄的"人員"字段上,連接引用就會十分方便;方法中還允許引用不同排列中的記錄組成序列以參與各種運(yùn)算,而并不要求這些記錄有相同的數(shù)據(jù)結(jié)構(gòu)。這些自由的結(jié)構(gòu)極大的擴(kuò)充了組織數(shù)據(jù)的自由度,數(shù)據(jù)可以以更加合理而簡潔的方式組織起來。由于指針引用的大量應(yīng)用,這些復(fù)雜的結(jié)構(gòu)并不會拖累系統(tǒng)的運(yùn)算速度,數(shù)據(jù)的計算將會更加高效。(4)更加靈活方便的運(yùn)算方法支持直接的集合運(yùn)算,可以方便的進(jìn)行集合的交并和差等處理。例如前文中所提到的"北京地區(qū)員工"和"銷售員工"表的問題,只要直接做一步簡單的取交集操作就5可以了,非常方便。另外本方法也提供了強(qiáng)大的運(yùn)算系統(tǒng),計算數(shù)據(jù)直觀而方便。(5)使用指針操作方法的運(yùn)算系統(tǒng)中所有對記錄、序列和排列的引用都是使用指針進(jìn)行引用的,而不是批量的復(fù)制數(shù)據(jù),每個記錄、序列和排列都只存儲一個本體,這樣不但可以節(jié)省大量的存儲空間,也大幅提高了系統(tǒng)的運(yùn)算效率。例如前文提到過的"員工個人信息表"與"員工銷售情況表"的關(guān)聯(lián)問題,在本方法中就可以直接給它們創(chuàng)建一個中間的索引表,而并不會批量復(fù)制數(shù)據(jù),效率高且節(jié)省資源。(6)實(shí)現(xiàn)了過程性處理本方法不像SQL—樣強(qiáng)調(diào)在一個語句中完成所有的運(yùn)算,本方法提供的運(yùn)算代碼允許分步完成計算,而且中間的計算結(jié)果可以供下次運(yùn)算使用,從而使計算代碼的編程自由度大大增加,代碼邏輯也更加清晰,更易于編寫,也增強(qiáng)了可讀性。圖1是本發(fā)明所述方法的具體實(shí)施方式的流程圖;圖2是本發(fā)明具體實(shí)施方式中所述"排列"的數(shù)據(jù)結(jié)構(gòu)示意圖。具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明進(jìn)行詳細(xì)描述。如圖1所示,一種數(shù)據(jù)處理方法,包括如下步驟—、創(chuàng)建排列和記錄的本體Sll,這個過程可以通過從關(guān)系數(shù)據(jù)庫中導(dǎo)入建立,或者直接依據(jù)現(xiàn)有數(shù)據(jù)創(chuàng)建。db.query(sql)表示在關(guān)系數(shù)據(jù)庫db中執(zhí)行SQL語句,并將結(jié)果表轉(zhuǎn)換成排列返回。r.F為從記錄中提取字段,r為記錄,F(xiàn)為字段名。例1.現(xiàn)有關(guān)系數(shù)據(jù)庫db中的表l,其結(jié)構(gòu)及內(nèi)容如下<table>tableseeoriginaldocumentpage6</column></row><table>執(zhí)行如下語句,可以將其導(dǎo)入并生成排列PI=db.query("SELECT*FR0ME表1")而后將生成一個包含5條記錄的排列Pl,對其有Pl(l)=={姓名=張三,語文=82,數(shù)學(xué)=85,英語=91}Pl(2)=={姓名=李四,語文=71,數(shù)學(xué)=61,英語=78}......本方法中,除了可以從關(guān)系數(shù)據(jù)庫中導(dǎo)入表外,也可以從現(xiàn)有的數(shù)據(jù)創(chuàng)建新的排列。A.固0q:Fi,)表示創(chuàng)建新的排列,A為序列或排列,F(xiàn)i為新排列包括的字段,Xi為每個字段的值表達(dá)式,表達(dá)式中循環(huán)A以插入記錄,Xi中可以引用A的當(dāng)前成員。另,[ai,a2,...an]表示創(chuàng)建序列,an為序列成員。在本方法中,所有的A.(x)和A.f(x)語法中,在沒有特殊說明的前提下,表達(dá)式x中,代表當(dāng)前計算針對成員,#代表該成員在A中的序號。例2.A=[〃a〃,〃b〃,〃c〃]P2=A.固(#:序號,值)以上就創(chuàng)建了一個新的排列P2。它可以用表格表示如下<table>tableseeoriginaldocumentpage7</column></row><table>顯然,該排列中包含3條記錄,用P2(i)可以調(diào)用里面的記錄,例如有P2(1).值==〃a〃P2(2).值==〃b〃例3.現(xiàn)有排列Pl:<table>tableseeoriginaldocumentpage7</column></row><table>以及排列P2:<table>tableseeoriginaldocumentpage7</column></row><table>名字地區(qū)〃李四〃,,上海,,而后使用代碼P2(l).地區(qū)=Pl(l)P2(2).地區(qū)=PI(2)以上就把P1的兩條記錄都分別賦給了P2中兩條記錄的字段。由于本方法中允許字段數(shù)據(jù)類型的自由性,P2的"地區(qū)"字段可以直接引用P1的記錄。這樣定義后,直接使用P2(1).地區(qū)區(qū)號就可以返回021了。與傳統(tǒng)方法相比,本方法中的這種引用機(jī)制為建立數(shù)據(jù)間的關(guān)聯(lián)帶來了極大的便利。而且本方法中所有對記錄的引用操作(復(fù)制、新建等除外),都是通過指針引用,而不是復(fù)制數(shù)據(jù),這樣也節(jié)省了大量的存儲空間。二、按需要引用變量、排列、記錄組成有序的序列S12。[ai,a2,...an]表示創(chuàng)建序列,an為序列成員。創(chuàng)建序列后,可以直接用A(i)來提取序列成員,A為序列,i為成員序號,從1開始。例4.A1=[1,3,5,7,2],A2=[〃a〃,4,〃bed"],這就創(chuàng)建了兩個簡單的序列。序列對成員的類型沒有限制,任何類型的變量都可以連成序列,如A3=[3,null,〃asdf",A2,A2(3),P,P(2)]其中P為一個排列。A3也是一個合法的序列。此處,在序列成員中對其他記錄或排列等對象的引用,本方法中也是使用指針調(diào)用的。例5.[1,2,3]!=[2,1,3][3,〃b〃,〃acd"]!=[3,〃acd",〃b〃]序列是有序的列,它的順序也是有意義的。在本方法中,所有對排列的引用操作(新建、創(chuàng)建副本等除外),都是通過指針引用,而不是復(fù)制數(shù)據(jù),這樣既可以大大的提高執(zhí)行和運(yùn)算的效率,也可以節(jié)省大量的存儲空間。在實(shí)現(xiàn)上,本方法將排列作為一個數(shù)組保存在內(nèi)存中,其中每個成員內(nèi)均保存指向記錄的指針(即目標(biāo)記錄的首地址),而后整個排列也使用數(shù)組的首地址(即指針)進(jìn)行調(diào)用。此后除復(fù)制外所有使用排列的情況下,都通過指針調(diào)用排列。只有復(fù)制排列得到的新排列才不是指針調(diào)用,而是復(fù)制數(shù)據(jù),重新劃一段內(nèi)存。例6.圖2是本方法中排列和序列的數(shù)據(jù)結(jié)構(gòu)示意圖。圖中的每個排列、序列和記錄都有其內(nèi)存首地址(即指針,圖中為圓形表示),其中記錄的首地址通常通過所屬排列的首地址偏移得到。圖中的排列1是一個銷售合同表,排列2是客戶表,排列1中的"客戶"字段,邏輯8上其內(nèi)容是排列2中的記錄,在實(shí)現(xiàn)上,"客戶"字段中保存的只是排列2中某條記錄的內(nèi)存首地址,在用戶調(diào)用"客戶"字段時,系統(tǒng)根據(jù)此地址去找到客戶記錄的實(shí)體,從而提取數(shù)據(jù)。圖中可以看到,排列1中的第二條和第三條合同的"客戶"字段引用的是同一條客戶記錄,在本方法中,這條記錄只需要保存一個實(shí)體,兩條合同記錄會調(diào)用同一個實(shí)體,當(dāng)這個記錄實(shí)體被更改時,兩條合同記錄的調(diào)用結(jié)果都會變動。圖中的序列1、序列2、序列3均是本方法中合法的序列結(jié)構(gòu)。序列1是簡單的由數(shù)值、字符串、空值和布爾值組成的序列;序列2是由一條條記錄組成序列,它的記錄均取自于排列l(wèi),此時它的運(yùn)算規(guī)則和排列1非常相似,相當(dāng)多的運(yùn)算可以通用,但它們有本質(zhì)的不同,序列2中存儲的只是排列1中記錄的地址,并沒有保存一個記錄實(shí)體,記錄的實(shí)體全部保存在排列1中,在排列1中可以增刪所有記錄的字段,而序列2中不可以做這樣的操作;序列3是一個各種數(shù)據(jù)類型混合起來序列,在本方法中,序列的成員沒有類型限制,所以序列3也是合法的序列。在本方法中,當(dāng)用戶調(diào)用這些地址成員時,系統(tǒng)將根據(jù)這些首地址來找到對象的實(shí)體,從而讀取數(shù)據(jù),而且,還可以用這種方法來實(shí)現(xiàn)多級引用,十分方便。本方法的這種使用指針調(diào)用記錄和排列的方法,不但可以節(jié)省大量的存儲空間,而且可以使記錄和排列在參與各種運(yùn)算(如集合運(yùn)算等)的時候具有高得多的處理速度,數(shù)據(jù)的組織也更加合理而高效。三、對排列、序列和記錄進(jìn)行運(yùn)算和處理S13,并且其運(yùn)算和處理結(jié)果仍可以用于下一步處理,直至得到需求的結(jié)果S14。在運(yùn)算和處理過程中,所有涉及到排列、序列和記錄的操作和引用,都是使用指針進(jìn)行引用,而不是復(fù)制數(shù)據(jù)。所述的運(yùn)算和處理包括對序列、排列和記錄的本體進(jìn)行修改,本實(shí)施例中為A(i)=X禾Pr.F=X語法;從排列中直接提取記錄和從記錄中直接提取字段,本實(shí)施例中為P(i)和r.F語法;對序列或排列直接進(jìn)行交、并、和、差等操作的集合運(yùn)算,在本實(shí)施例中為A'B、A&B、AlB、AXB語法;針對序列或排列成員的匯總運(yùn)算,即針對基于序列/排列的表達(dá)式的計數(shù)、求和、求平均、求最值、合并重復(fù)項(xiàng)操作,在本實(shí)施例中為A.count()、A.s咖(x)、A.avg(x)、A.max(x)、A.min(x)、A.id(x)函數(shù);—次性對序列或排列的每個成員運(yùn)算同一表達(dá)式并返回結(jié)果序列,在本實(shí)施例中為A.(x)函數(shù);在序列或排列中按條件對記錄進(jìn)行選出,在遍歷排列的過程中通過判斷表達(dá)式真假來在序列或排列中選出一個或多個成員,在本實(shí)施例中為A.select(x)函數(shù);按條件指定表達(dá)式對序列或排列中的成員進(jìn)行排序,在本實(shí)施例中為A.sort(x);按任意指定的表達(dá)式對序列或排列中的成員進(jìn)行分組,使表達(dá)式值相同的成員都分為一組,在本實(shí)施例中為A.group(Xi,...)函數(shù);按指定表達(dá)式來連接多個序列或排列的成員的方法,使得從一個序列或排列的某一成員就可以直接獲取到另一個序列或排列的與之相連接的成員,在本實(shí)施例中為join(Xi-F")函數(shù);在所有的序列和排列函數(shù)運(yùn)算表達(dá)式中,提供可以直接引用當(dāng)前計算所針對的成員或此成員在序列或排列中的序號的方法,在本實(shí)施例的示例中為和#語法。本實(shí)施例中,對序列和記錄的編輯操作舉例如下本方法中,對序列和記錄的字段,都可以直接用賦值的方法修改。A(i)=X表示將序列A的第i個成員重新賦值為X;r.F=X表示將記錄r的F字段重新賦值為X。例7.A=[1,3,5,7]A(2)=〃c〃之后便有A==[1,"c",5,7]。P3=[1,3,5,7].new(#:F1,*F2)此即創(chuàng)建了一個排列FlF21129325449而后再執(zhí)行P3(2).F2=81于是便有P3(2)為{Fl=2,F(xiàn)2=81}。本實(shí)施例中,對排列的編輯操作舉例如下P.insert(k,Xi:&,...)為在排列P的位置k前插入新記錄,i為0在最后插入,新紀(jì)錄插入后即被賦值,&為字段名,Xi為新字段值,返回P。P.aIter(Ni:Fi,...)為調(diào)整P中所有記錄的字段結(jié)構(gòu)為Ni,...,Ni為一系列新字段名,&為新字段的取值,與&相同或空則可以省略。P.delete(k)為刪除P中第k條記錄。例8.現(xiàn)有如下排列P4:序號名稱區(qū)號1"北京"0102,,上海,,02110執(zhí)行如下代碼P4.insert(3,2:之后P4即為<table>tableseeoriginaldocumentpage11</column></row><table>再執(zhí)行如下代碼P4.alter(Name,電話區(qū)號區(qū)號,名稱)之后P4即為<table>tableseeoriginaldocumentpage11</column></row><table>再執(zhí)行如下代碼P4.delete(l)P4.delete(l)之后P4即為Name<table>tableseeoriginaldocumentpage12</column></row><table>在本方法中,對排列字段的增刪、重命名、排序操作都是方便而自由的。本方法中,對序列和排列,支持和數(shù)學(xué)中的集合運(yùn)算概念完全相似的集合運(yùn)算。本實(shí)施例中,對序列或排列的集合運(yùn)算舉例如下A、B均為序列或排列,A的成員數(shù)為n,B的成員數(shù)為m:求和運(yùn)算AlB為[A(l),...,A(n),B(l),...,B(m)];做差運(yùn)算A\B為A([(ieNIA(i)gB}]);交運(yùn)算A'B為A\(A\B);并運(yùn)算A&B為AI(B\A)。需要注意的是,排列在經(jīng)過集合運(yùn)算之后,返回的都將是序列。例9.P1為包括rl、r2、r3三個記錄的排列,P2為包括記錄sl、s2、s3的排列,有:[1,3,5]I[2,4,6]==[1,3,5,2,4,6][〃a",〃b〃,〃abc〃]\[〃b〃,〃a"]==[〃abc〃][1,2,〃a",〃bed",rir[r2,sl,2,Pl,〃a"]==[2,〃a"][1,2,〃a〃,rl]&[r2,2,P1,〃a"]==[1,2,〃a〃,rl,r2,Pl]Pl|P2==[rl,r2,r3,sl,s2,s3]本實(shí)施例中,對序列或排列的匯總運(yùn)算舉例如下A為序列或排列,x為表達(dá)式A.count()為序列或排列中成員的個數(shù)。A.sum(x)為針對所有成員計算出的表達(dá)式x的和。A.avg(x)為表達(dá)式x的平均值。A.min(x)為表達(dá)式x的最小值。A.max(x)為表達(dá)式x的最大值。A.id(x)為排序A并合并其所有的x表達(dá)式計算結(jié)果相同的成員,x缺省則合并相同的成員,最后返回成員序列。例10.現(xiàn)有排列P為:<table>tableseeoriginaldocumentpage12</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table>0152]則有0153]P.count()==0154]P.s咖(年齡)=0155]P.avg(年齡)=0156]P.min(年齡)=0157]P.id(姓名)=0158][3,1,5,3,〃a0159]本方法中,可以-4=100=25=18=[P(1),P(2),P(3)],〃ab",〃a"]id()==[1,3,5,-次性的對序列或排列的每個成員運(yùn)算同-〃a",〃ab"]-表達(dá)式并返回結(jié)果序列。本實(shí)施例中舉例如下0160]A為序列或排列,x為表達(dá)式,A.(x)為針對A的每個成員計算x的值并返回x的結(jié)果序列。0161]例ll.基于例10中的排列P,另有序列A=[1,2,3,4],則有:P.(姓名)==[〃張三〃,〃李四〃,〃王五〃,〃趙六"]P.((年齡_20)*0.2)=[1.6,2,-0.4,0.8]A.(*)==[1,4,9,16]本實(shí)施例中,對序列或排列的選出運(yùn)算舉例如下A為序列或排列,x為表達(dá)式,A.select(x)為找出A中所有能使x表達(dá)式為真的記錄,并組成序列返回。0167]例12.基于例10,則有P.select(>24)==[P(1),P(2)]我們可以用如下的方法找出P中年齡最大的一條或多條記錄a=P.max(年齡)r=P.select(==a)r便是年齡最大的記錄,為[P(2)]。本實(shí)施例中,對序列或排列的排序運(yùn)算舉例如下A為序列或排列,x為表達(dá)式,A.sort(x)函數(shù)的作用是返回A的成員按照表達(dá)式x值的升序重新排列后的序列。0175]例13.現(xiàn)基于例10中的排列P,執(zhí)行C=P.sort(年齡)而后就有C==[P(3),P(4),P(1),P(2)]本實(shí)施例中,對序列或排列的分組運(yùn)算舉例如下130162]0163]0164]0165]0166]0168]0169]0170]0171]0172]0173]0174]0176]0177]0178]0179]A為序列或排列,x為表達(dá)式,A.group(Xi...)函數(shù)的作用是把A的成員按照表達(dá)式Xi分組,使得每個組內(nèi)的表達(dá)式Xi...的值全部相等,返回所有的組序列組成的序列。例14.現(xiàn)有如下排列P:名字<table>tableseeoriginaldocumentpage14</column></row><table>現(xiàn)執(zhí)行A=P.group(地區(qū))則現(xiàn)在A為[[P(1),P(4),P(6),P(7),P(9)],[P(2),P(8)],[P(3),P(5),P(10)]]序列內(nèi)的成員為另三個序列,三個序列內(nèi)分別是北京、廣州、上海的記錄。為直觀一些,可以將它轉(zhuǎn)換為一個排列,執(zhí)行代碼P2=A.new((1).地區(qū)地區(qū),員工)則可以得到如下的P2:地區(qū)員工"北京"[P(1),P(4),P(6),P(7),P(9)]"廣州"[P(2),P(8)]14<table>tableseeoriginaldocumentpage15</column></row><table>在這種結(jié)構(gòu)中,每個組內(nèi)的記錄都是直接從原始排列P中調(diào)用的,在這種結(jié)構(gòu)下做一些常用的統(tǒng)計會非常方便,例如現(xiàn)在直接使用P2(l).員工.s咖(銷售額)即可返回北京地區(qū)的銷售總額,類似的P2(2).員工.avg(銷售額)就可以返回廣州地區(qū)雇員的人平均銷售額。本實(shí)施例中,對序列或排列的連接運(yùn)算舉例如下Xi是序列或排列,yi為對應(yīng)的表達(dá)式,j0in(Xi:yi:Fi,...)函數(shù)的作用是,按照Xi中yi值相等的規(guī)則連接各個Xi,返回以&為各個字段名的排列,每個Fi的值都是相應(yīng)的Xi中的記錄。即通過多個序列或排列中各自指定的表達(dá)式的相等關(guān)系來連接它們,并創(chuàng)建索引排列。例15.現(xiàn)有如下排列定義排歹ljEmployee:ID姓名1〃王偉"2〃張學(xué)眉"3"張穎"4〃張三"排列Contract:ID銷售額雇員10248150000310255100000210258200000110263500000215<table>tableseeoriginaldocumentpage16</column></row><table>現(xiàn)在令P=join(雇員表ID:雇員,訂單表雇員訂單)則現(xiàn)在P為<table>tableseeoriginaldocumentpage16</column></row><table>這樣就把兩個表按照雇員ID連接起來了,此后通過雇員查詢訂單情況就變得十分容易了,比如可以直接用select函數(shù)選出某雇員拿到的所有訂單,或者用group函數(shù)對排列P進(jìn)行分組,管理數(shù)據(jù)會更加方便?!獋€綜合應(yīng)用實(shí)例例16.下面以一個實(shí)際應(yīng)用中常見的簡單需求為例介紹一下本方法的實(shí)際應(yīng)用過程?,F(xiàn)有如下排列定義排歹ljEmployee:a<table>tableseeoriginaldocumentpage16</column></row><table><table>tableseeoriginaldocumentpage17</column></row><table><table>tableseeoriginaldocumentpage18</column></row><table>現(xiàn)在,我們想要得到這些數(shù)據(jù)1、客戶"王炫皓"的訂單總金額;2、華北地區(qū)的訂單數(shù)目及總金額;3、每位雇員拿到的訂單數(shù)目及訂單總金額列表。在本方法中可以用如下操作流程實(shí)現(xiàn)>首先計算客戶"王炫皓"的訂單總金額,執(zhí)行ID1=Customer,select(姓名二二〃王弦皓〃)(1).客戶ID這樣在變量ID1中就得到了客戶"王炫皓"的客戶ID,為1022,然后執(zhí)行Cl=Contract,select(客戶ID==ID1)這樣便得到了客戶"王炫皓"的所有訂單的序列Contractl==[Contract(2),Contract(9),Contract(15)]最后執(zhí)行Amount1=Contract1.金額.sum()于是在Amountl變量中我們就得到了客戶"王炫皓"的訂單總金額,為950000。這樣一步一步的計算,每一步的結(jié)果都可以保存下來供其他運(yùn)算使用,比傳統(tǒng)的一步完成的方式有更大的靈活性。當(dāng)然在本方法中,以上過程也可以合并執(zhí)行,甚至合并為一行代碼執(zhí)行Amo皿tl=Contract,select(客戶ID==Customer,select(姓名==〃王弦皓")(1).客戶ID).金額.sum()其結(jié)果也是一樣的??梢苑植襟E執(zhí)行運(yùn)算是本方法的特點(diǎn),分步執(zhí)行比傳統(tǒng)的SQL中的一步完成有大得多的編程自由度,也令代碼的邏輯結(jié)構(gòu)更加清晰,更易于編寫,也增強(qiáng)了可讀性。>下面來計算華北地區(qū)的訂單數(shù)目及總金額,首先執(zhí)行Tablel=join(Customer:客戶ID:客戶,Contract:客戶ID:訂單)得到的Tablel為:<table>tableseeoriginaldocumentpage18</column></row><table><table>tableseeoriginaldocumentpage19</column></row><table>然后執(zhí)行Contract2=Tablel.select(客戶.地區(qū)==〃華北")訂單現(xiàn)在Contract2排列中即為華北地區(qū)的所有訂單,最后執(zhí)行Count1=Contract2.count()Amo皿t2=Contract2.金額.sum()于是在Countl變量中我們就得到了華北地區(qū)的訂單數(shù)目,為10個;Amount2變量中就得到了華北地區(qū)的訂單總金額,為1680000。>下面再來計算每位雇員拿到的訂單總金額列表,執(zhí)行Table2=Customer,new(雇員,Contract,select(Contract..銷售==Customer..雇員ID):訂單)其中select函數(shù)中的"Customer."代表提取當(dāng)前外層的"Customer,,排列的當(dāng)前循環(huán)所針對的記錄。得到的Table2為<table>tableseeoriginaldocumentpage20</column></row><table>然后執(zhí)行Table3=Table2.new(雇員.姓名雇員,訂單.count():訂單數(shù)目,訂單.金額.s咖()訂單總額)得到的Table3即為每位雇員拿到的訂單總金額列表<table>tableseeoriginaldocumentpage20</column></row><table>以上是采用本發(fā)明所述的方法進(jìn)行的部分運(yùn)算和處理的演示實(shí)例。采用本發(fā)明所述的方法能夠提供強(qiáng)大的運(yùn)算和處理系統(tǒng),包括豐富的函數(shù)和運(yùn)算方法,不但有強(qiáng)大的運(yùn)算能力,數(shù)據(jù)計算過程也更加簡潔直觀。本發(fā)明所述的方法并不限于具體實(shí)施方式中所述的實(shí)施例,本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出其他的實(shí)施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍。權(quán)利要求一種數(shù)據(jù)處理方法,包括如下步驟(1)創(chuàng)建排列和記錄的本體;(2)按需要引用常量、變量、排列、記錄組成有序的序列;(3)對排列、序列和記錄進(jìn)行運(yùn)算和處理,直至得到需求的結(jié)果;在運(yùn)算和處理過程中,所有涉及到排列、序列和記錄的操作和引用,除創(chuàng)建副本操作外,都使用指針進(jìn)行引用。2如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(1)中,所述的排列是一種有序的成員列,排列中的成員為記錄,記錄的字段為數(shù)據(jù),數(shù)據(jù)是任意的類型,包括是另一個記錄、排列或序列。3.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(1)中,所述的排列和記錄既能夠從現(xiàn)有數(shù)據(jù)創(chuàng)建,也能夠從關(guān)系數(shù)據(jù)庫導(dǎo)入。4.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(1)中,所述的記錄的本體保存在排列中,任何一條記錄必然屬于排列,記錄最初只能通過排列的成員調(diào)用。5.如權(quán)利要求1至4中任一項(xiàng)所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(2)中,所述的序列是一種數(shù)據(jù)結(jié)構(gòu),為有序的成員列,其成員是任意的類型,包括是另一個記錄、排列或序列。6.如權(quán)利要求1至4中任一項(xiàng)所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的每個排列、序列和記錄只存儲一個本體,變量內(nèi)、字段內(nèi)或序列的成員內(nèi)的引用都只存儲目標(biāo)記錄、排列或序列的地址。7.如權(quán)利要求6所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,對排列、序列和記錄進(jìn)行的運(yùn)算和處理的結(jié)果仍能夠用于下一步的運(yùn)算和處理。8.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括對序列、排列和記錄的本體進(jìn)行修改。9.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括從排列中直接提取記錄和從記錄中直接提取字段。10.如權(quán)利要求1所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括對序列直接進(jìn)行交、并、和、差操作的集合運(yùn)算。11.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括針對序列或排列成員的匯總運(yùn)算,其中包括表達(dá)式的計數(shù)、求和、求平均、求最值、合并重復(fù)項(xiàng)操作。12.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括一次性對序列或排列的每個成員運(yùn)算同一表達(dá)式并返回結(jié)果序列。13.如權(quán)利要求1所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括在序列或排列中按條件對成員進(jìn)行選出。14.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括按條件指定表達(dá)式對序列或排列中的成員進(jìn)行排序。15.如權(quán)利要求l所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括按任意指定的表達(dá)式對序列或排列中的成員進(jìn)行分組,使表達(dá)式值相同的成員都分為一組。16.如權(quán)利要求1所述的一種數(shù)據(jù)處理方法,其特征在于在步驟(3)中,所述的運(yùn)算和處理包括按指定表達(dá)式來連接多個序列或排列的成員的方法,使得從一個序列或排列的某一成員就能夠直接獲取到另一個序列或排列的與之相連接的成員。全文摘要本發(fā)明公開了一種數(shù)據(jù)處理的方法,屬于計算機(jī)信息處理
技術(shù)領(lǐng)域:
。現(xiàn)有的最常用的技術(shù)是基于關(guān)系數(shù)據(jù)庫的查詢和訪問語言SQL技術(shù),但由于其數(shù)據(jù)結(jié)構(gòu)被限制于表的形式以及其非過程性等特點(diǎn),在解決一些應(yīng)用中的復(fù)雜邏輯關(guān)系時十分繁瑣。本發(fā)明所述的方法,以“記錄”為基本單元管理數(shù)據(jù),提供結(jié)構(gòu)自由的“序列”以輔助運(yùn)算,使用指針操作來代替大部分的數(shù)據(jù)操作,從底層支持集合運(yùn)算,從而大大提高數(shù)據(jù)管理和計算的效率和靈活性。本發(fā)明所述的方法讓用戶可以在高層的數(shù)據(jù)結(jié)構(gòu)和操作接口上工作,而無需接觸底層的數(shù)據(jù)存儲細(xì)節(jié),并且該操作接口具有靈活的數(shù)據(jù)結(jié)構(gòu)和強(qiáng)大自由的運(yùn)算系統(tǒng),能使用戶更加方便高效的管理數(shù)據(jù)。文檔編號G06F17/30GK101789024SQ201010119309公開日2010年7月28日申請日期2010年3月5日優(yōu)先權(quán)日2010年3月5日發(fā)明者蔣步星申請人:北京潤乾信息系統(tǒng)技術(shù)有限公司