一種數(shù)據(jù)查詢方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)查詢方法和系統(tǒng),首先抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度,建立描述所述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;然后根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系,并根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句,最后依據(jù)物理表與邏輯表之間的映射關(guān)系,將邏輯查詢語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句,并將結(jié)構(gòu)化查詢語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。通過本發(fā)明所述的方法和系統(tǒng),能夠降低數(shù)據(jù)表理解及書寫的復(fù)雜度,改善業(yè)務(wù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的可理解性。
【專利說明】一種數(shù)據(jù)查詢方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)及查詢【技術(shù)領(lǐng)域】,具體涉及一種新的數(shù)據(jù)查詢方法和系統(tǒng)?!颈尘凹夹g(shù)】
[0002]RDB (Relational Database,關(guān)系數(shù)據(jù)庫)及其上的 SQL (Structured QueryLanguage,結(jié)構(gòu)化查詢語言)是當(dāng)前信息系統(tǒng)中應(yīng)用最廣泛的數(shù)據(jù)存儲(chǔ)與查詢方案。RDB將數(shù)據(jù)存儲(chǔ)于若干物理表(關(guān)系數(shù)據(jù)庫中存放數(shù)據(jù)的基本單元,有若干數(shù)據(jù)結(jié)構(gòu)相同的記錄構(gòu)成,上下文清晰時(shí)將簡(jiǎn)稱表)中,每個(gè)表由若干數(shù)據(jù)結(jié)構(gòu)相同的記錄構(gòu)成,記錄的屬性稱為字段。其中某些字段并指定為表的主鍵,要求這些字段(組)的取值在表內(nèi)記錄中唯一(即沒有兩條記錄在這些字段上的取值相同),這樣可以用這組字段值為唯一確定一條記錄。
[0003]當(dāng)某個(gè)表的記錄要引用另一個(gè)表的記錄時(shí)(如員工表的所在部門字段將引用部門表中的記錄),則建立引用表到被引用表的外鍵,引用表中每條記錄的某些稱為外鍵的字段取值為被引用表的某記錄的主鍵。一個(gè)表可以建立多個(gè)引用其它表的外鍵,還可以建立引用本表的外鍵(如人員表中的配偶字段仍然引用人員表中的記錄),也可能針對(duì)同一個(gè)被引用表建立多個(gè)關(guān)聯(lián)(如人員表中的出生地區(qū)和工作地區(qū)均引用地區(qū)表)。
[0004]一個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)可能有多個(gè)表構(gòu)成,這些表之間均可能有關(guān)聯(lián),有時(shí)關(guān)聯(lián)還不止一個(gè),甚至還有與本表自己的關(guān)聯(lián)。這樣,在RDB中,這些表將構(gòu)成一個(gè)網(wǎng)狀結(jié)構(gòu),N個(gè)表之間的關(guān)聯(lián)數(shù)量是N2級(jí)別的,很不利于應(yīng)用開發(fā)人員理解業(yè)務(wù)數(shù)據(jù)的體系結(jié)構(gòu)。同時(shí),表與表之間的耦合度也非常高,導(dǎo)致應(yīng)用程序的局部維護(hù)修改都很困難。
[0005]當(dāng)要取出多個(gè)有關(guān)聯(lián)表中的記錄時(shí),SQL采用連接語法來書寫,其基本原理可以理解為將多個(gè)表中的記錄先做完全叉乘(即笛卡爾積),再使用引用表的外鍵與被引用表的外鍵相等的過濾條件將叉乘出來的不必要的記錄去除,從而得到最后的結(jié)果。如果有涉及N個(gè)表,則兩兩之間均有可能有關(guān)聯(lián),則可能書寫出來的連接過濾條件會(huì)有N* (N-1) /2個(gè),復(fù)雜度也是N2級(jí)別的,導(dǎo)致書寫非常困難。
【發(fā)明內(nèi)容】
[0006]針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種數(shù)據(jù)查詢方法及系統(tǒng),降低數(shù)據(jù)表理解及書寫的復(fù)雜度,改善業(yè)務(wù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的可理解性。
[0007]為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
[0008]一種數(shù)據(jù)查詢方法,包括以下步驟:
[0009]( I)抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度;
[0010](2)建立所述業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;所述的邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù);
[0011](3)根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系;所述的物理表用于存儲(chǔ)業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù);
[0012](4)根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句LSQL ;[0013](5)依據(jù)物理表與邏輯表之間的映射關(guān)系,將邏輯查詢語句LSQL轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL,并將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。
[0014]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,步驟(I)中,在抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度時(shí),還包括抽取各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系;所述的各項(xiàng)維度的層次包括基礎(chǔ)層和匯總層;所述的匯總層是指該層次能夠由其它一個(gè)或多個(gè)基礎(chǔ)層次計(jì)算出來。
[0015]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,步驟(2)中,所述的邏輯表包括若干邏輯字段,建立邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系的具體方式為:
[0016]將邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段,邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組。
[0017]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,建立物理表與邏輯表之間的映射關(guān)系的具體方式為:
[0018]a)在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來;
[0019]b)建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系;
[0020]c)建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系。
[0021]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,步驟a)中,根據(jù)邏輯表所描述的業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)范圍確定與其對(duì)應(yīng)的基表。
[0022]再進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,步驟c)中,所述的邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系是指邏輯表中的每個(gè)邏輯字段由基表字段構(gòu)成的表達(dá)式表不。
[0023]更進(jìn)一步,如上所述的一種數(shù)據(jù)查詢方法,步驟(5)中,將LSQL查詢語句轉(zhuǎn)化為SQL語句的具體方式為:
[0024]根據(jù)所述的邏輯數(shù)據(jù)查詢語句LSQL獲取語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將LSQL語句轉(zhuǎn)化成基于物理表的SQL查詢語句。
[0025]一種數(shù)據(jù)查詢系統(tǒng),包括:
[0026]維度抽取模塊,用于抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度;
[0027]邏輯表建立模塊,建立所述業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;所述的邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù);
[0028]映射關(guān)系建立模塊,用于根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系;
[0029]邏輯查詢語句設(shè)計(jì)模塊,用于根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句LSQL ;
[0030]數(shù)據(jù)查詢模塊,用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL,并將SQL語句在數(shù)據(jù)庫中執(zhí)行以完成業(yè)務(wù)數(shù)據(jù)的查詢。
[0031]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢系統(tǒng),所述的維度抽取模塊還用于抽取各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系;所述的各項(xiàng)維度的層次包括基礎(chǔ)層和匯總層;所述的匯總層是指該層次能夠由其它一個(gè)或多個(gè)基礎(chǔ)層次計(jì)算出來。[0032]進(jìn)一步,如上所述的一種數(shù)據(jù)查詢系統(tǒng),所述的邏輯表建立模塊包括:
[0033]外鍵設(shè)置單元,用于設(shè)置邏輯表的外鍵,邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段;
[0034]主鍵設(shè)置單元,用于設(shè)置邏輯表的主鍵,邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組。
[0035]再進(jìn)一步,如上所述的一種數(shù)據(jù)查詢系統(tǒng),所述的映射關(guān)系建立模塊包括:
[0036]基表選擇單兀,用于在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來;
[0037]主鍵關(guān)系建立單兀,用于建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系;
[0038]字段關(guān)系建立單元,用于建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系O
[0039]更進(jìn)一步,如上所述的一種數(shù)據(jù)查詢系統(tǒng),所述的數(shù)據(jù)查詢模塊包括:
[0040]語句轉(zhuǎn)換單元,用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL語句,轉(zhuǎn)換的具體方式為:
[0041]根據(jù)所述的邏輯數(shù)據(jù)查詢語句LSQL獲取語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將LSQL語句轉(zhuǎn)化成基于物理表的SQL查詢語句;
[0042]查詢單元,用于將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。
[0043]本發(fā)明的有益效果在于:
[0044]I)將關(guān)系數(shù)據(jù)庫RDB中網(wǎng)狀的數(shù)據(jù)模型改造成總線結(jié)構(gòu),即每個(gè)邏輯表均與事先抽取出來的維度關(guān)聯(lián),而邏輯表之間不再有關(guān)聯(lián)。關(guān)聯(lián)數(shù)量與邏輯表數(shù)量匹配,復(fù)雜度是N級(jí)別的。這將極大改善業(yè)務(wù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)可理解性。
[0045]2 )由于邏輯表之間不再有關(guān)聯(lián),從而降低表之間的耦合度,這樣可以很方便地進(jìn)行系統(tǒng)的局部修改和升級(jí)及添加、刪除某個(gè)子系統(tǒng)。
[0046]3)可以通過在邏輯模型的基礎(chǔ)上設(shè)計(jì)LSQL語法(基于本發(fā)明所述方法及系統(tǒng)的邏輯數(shù)據(jù)查詢語言),在書寫多表關(guān)聯(lián)查詢時(shí)也只需要針對(duì)匯總維度對(duì)齊,而無須關(guān)心表之間的關(guān)聯(lián),使書寫復(fù)雜度也降成N級(jí)別。
[0047]4)對(duì)于單外鍵指向的附表引用,LSQL可以簡(jiǎn)單地使用對(duì)象方式引用,將這種形式的多表關(guān)聯(lián)簡(jiǎn)單看成是單表查詢,極大降低理解和書寫的復(fù)雜度。
【專利附圖】
【附圖說明】
[0048]圖1為【具體實(shí)施方式】中一種數(shù)據(jù)查詢系統(tǒng)的結(jié)構(gòu)框圖;
[0049]圖2為【具體實(shí)施方式】中一種數(shù)據(jù)查詢方法的流程圖;
[0050]圖3為實(shí)施例中銷售管理系統(tǒng)需要的數(shù)據(jù)表;
[0051]圖4為實(shí)施例中確定邏輯表外鍵的示意圖;
[0052]圖5為實(shí)施例中確定邏輯表主鍵的示意圖。
【具體實(shí)施方式】
[0053]下面結(jié)合說明書附圖與【具體實(shí)施方式】對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說明。[0054]為了更好的說明本發(fā)明,首先對(duì)本【具體實(shí)施方式】中的一些縮略語和關(guān)鍵術(shù)語進(jìn)行解釋:
[0055]RDB !Relational Database,關(guān)系數(shù)據(jù)庫
[0056]SQL:Structured Query Language,結(jié)構(gòu)化查詢語言,一種用于訪問關(guān)系數(shù)據(jù)庫查詢數(shù)據(jù)的程序語言
[0057]物理表:關(guān)系數(shù)據(jù)庫中存放數(shù)據(jù)的基本單元,有若干數(shù)據(jù)結(jié)構(gòu)相同的記錄構(gòu)成。上下文清晰時(shí)將簡(jiǎn)稱表。
[0058]物理表的字段:構(gòu)成物理表記錄的屬性。
[0059]物理表的主鍵:表中各記錄上取值唯一的字段(組)。
[0060]物理表的外鍵:關(guān)系數(shù)據(jù)庫的概念,某個(gè)表引用了另一個(gè)表的主鍵值時(shí)換為外鍵。
[0061]維度:一些用于統(tǒng)計(jì)匯總的標(biāo)準(zhǔn),其取值范圍事先已確定知道。如時(shí)間、地區(qū)、性別等,簡(jiǎn)稱維。
[0062]層:維度可以有多個(gè)層次,如果時(shí)間可按日、月、年、周等層次匯總,地區(qū)可分為國、省、市等多層。層次之間可以有計(jì)算關(guān)系
[0063]邏輯表:本發(fā)明中的數(shù)據(jù)表概念,可以和若干物理表建立某種映射關(guān)系;上下文明確時(shí)將簡(jiǎn)稱表
[0064]邏輯表的字段:邏輯表的字段
[0065]邏輯表的外鍵:邏輯表中取值為維(或其層)的字段
[0066]邏輯表的主鍵:表中各記錄取值唯一的外鍵(組)
[0067]附表:以某個(gè)維(或其層)為主鍵的邏輯表
[0068]廣義外鍵:遞歸定義為外鍵(或其層)或廣義外鍵的附表的外鍵(或其層)
[0069]LSQL =Logical SQL,基于本發(fā)明體系設(shè)計(jì)的邏輯數(shù)據(jù)查詢語言
[0070]圖1示出了本發(fā)明【具體實(shí)施方式】中一種數(shù)據(jù)查詢系統(tǒng)的結(jié)構(gòu)框圖,由圖中可以看出,該系統(tǒng)主要包括維度抽取模塊11、邏輯表建立模塊12、映射關(guān)系建立模塊13、邏輯查詢語句設(shè)計(jì)模塊14和數(shù)據(jù)查詢模塊15,其中:
[0071]維度抽取模塊11用于抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度以及各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系。
[0072]邏輯表建立模塊12建立所述業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;所述的邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù);該模塊包括用于設(shè)置邏輯表的外鍵,邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段的外鍵設(shè)置單元,以及用于設(shè)置邏輯表的主鍵,邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組的主鍵設(shè)置單元。
[0073]映射關(guān)系建立模塊13用于根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系;該模塊包括用于在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表的基表選擇單元,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來,用于建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系的主鍵關(guān)系建立單元,以及用于建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系的字段關(guān)系建立單元。
[0074]邏輯查詢語句設(shè)計(jì)模塊14用于根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句LSQL ;[0075]數(shù)據(jù)查詢模塊15用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL,并將SQL語句在數(shù)據(jù)庫中執(zhí)行以完成業(yè)務(wù)數(shù)據(jù)的查詢。該模塊包括:
[0076]語句轉(zhuǎn)換單元,用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL語句,轉(zhuǎn)換的具體方式為:
[0077]根據(jù)所述的邏輯數(shù)據(jù)查詢語句LSQL獲取語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將LSQL語句轉(zhuǎn)化成基于物理表的SQL查詢語句;
[0078]查詢單元,用于將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。
[0079]圖2示出了本發(fā)明【具體實(shí)施方式】中一種數(shù)據(jù)查詢方法的流程圖,該方法包括以下步驟:
[0080]步驟S21:抽取業(yè)務(wù)系統(tǒng)的各維度;
[0081]根據(jù)需要建立關(guān)系數(shù)據(jù)庫RDB的業(yè)務(wù)系統(tǒng),抽取業(yè)務(wù)系統(tǒng)中可能用到的各項(xiàng)維度以及各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系。本實(shí)施方式中的維度是一些用于統(tǒng)計(jì)匯總業(yè)務(wù)系統(tǒng)的標(biāo)準(zhǔn)或者相關(guān)參數(shù),其取值范圍事先已確定知道。
[0082]其中,維度所包含的層次包括基礎(chǔ)層和匯總層;所述的匯總層是指該層次能夠由一個(gè)或者多個(gè)其它基礎(chǔ)層計(jì)算出來。
[0083]對(duì)于不同的業(yè)務(wù)系統(tǒng),其所需要用到的維度是不同的,例如,對(duì)于一銷售管理系統(tǒng),其所要用到的各項(xiàng)維度就需要由客戶維、地區(qū)維、日期維以及產(chǎn)品維等。而各維度所包括的具體層次也是不同的,例如,對(duì)于時(shí)間維度,該維度所包含的層次就包括日、月、周、年等,而在這些層次中,日為基礎(chǔ)層,而月為匯總層(可以由日計(jì)算出來),同樣年、周也都是匯總層,均可由日計(jì)算出來,年也可以由月計(jì)算而來。而各層次之間的計(jì)算關(guān)系也是明確的,可以確定出來的,如周與日之間的計(jì)算關(guān)系,年與月等之間的計(jì)算關(guān)系都是可以確定的。但是對(duì)于月與周這兩個(gè)層次,由于月不可以由周計(jì)算出來,兩者之間沒有計(jì)算關(guān)系。
[0084]通過確定各維度所包含的層次之間的計(jì)算關(guān)系,使業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù)按照維度的不同層次匯總或者對(duì)齊。
[0085]步驟S22:建立業(yè)務(wù)數(shù)據(jù)的邏輯表,并建立邏輯表與維度之間的關(guān)聯(lián)關(guān)系;
[0086]根據(jù)業(yè)務(wù)系統(tǒng)的需要,建立業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系。
[0087]邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù),邏輯表由若干邏輯字段構(gòu)成。如,對(duì)于一銷售管理系統(tǒng),其邏輯表可以包括訂單表、回款表、客戶表等,訂單表可以由訂單ID、發(fā)貨日期等若干字段組成。
[0088]其中,所述的建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系是指建立邏輯表的外鍵及主鍵與步驟S21中所抽取的維度之間的關(guān)聯(lián)關(guān)系,或者是邏輯表的外鍵及主鍵與步驟S21中所抽取的維度的層的關(guān)聯(lián)關(guān)系,具體如下:
[0089]將邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段,建立起邏輯表外鍵與維度之間的關(guān)聯(lián);邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組,即邏輯表的外鍵為指向某個(gè)維度或者維度的層的字段,而通過邏輯表的主鍵可唯一確定邏輯表中的記錄。[0090]通過建立上述關(guān)聯(lián)關(guān)系,就將現(xiàn)有網(wǎng)狀的物理表關(guān)系模型變成了總線式的邏輯表關(guān)系數(shù)據(jù)模型,邏輯表之間沒有直接關(guān)系,所有邏輯表都與維(類似一條總線)建立關(guān)聯(lián)。本發(fā)明中邏輯表的外鍵即為邏輯表中取值為維度(或其層)的字段,主鍵為邏輯表中各記錄取值唯一的字段或者字段組。
[0091]步驟S23:根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與邏輯表之間的映射關(guān)系;
[0092]根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系。其中,所述的物理表用于存儲(chǔ)業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù),物理表可以根據(jù)業(yè)務(wù)系統(tǒng)的需要新建,也可以從現(xiàn)有的數(shù)據(jù)庫中取出物理表結(jié)構(gòu)。建立物理表與邏輯表之間映射關(guān)系的具體方式如下:
[0093]a)在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來;
[0094]b)建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系;
[0095]c)建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系,該計(jì)算關(guān)系是指邏輯表中的每個(gè)邏輯字段由基表字段構(gòu)成的表達(dá)式表示,最常見的情況是邏輯指端直接對(duì)應(yīng)某個(gè)基表字段。
[0096]其中,與每個(gè)邏輯表相對(duì)應(yīng)的物理表大多是一個(gè),有時(shí)是多個(gè),根據(jù)邏輯表所描述的業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)范圍來確定其與哪個(gè)或哪些物理表對(duì)應(yīng)。如與訂單相關(guān)的邏輯表即邏輯訂單表與用于存儲(chǔ)訂單數(shù)據(jù)的物理訂單表相對(duì)應(yīng)。一般情況下,邏輯表主鍵與與其對(duì)應(yīng)的基表的主鍵之間是 對(duì)應(yīng)的關(guān)系,特殊情況下,可能邏輯表的主鍵并不與基表的主鍵對(duì)應(yīng),但仍可以根據(jù)邏輯表所描述的數(shù)據(jù)邏輯建立其主鍵與基表主鍵的映射關(guān)系,建立關(guān)系依具體情況而定。
[0097]步驟S24:用戶根據(jù)查詢需要按事先設(shè)計(jì)的邏輯數(shù)據(jù)查詢語法編寫邏輯數(shù)據(jù)查詢語句;
[0098]步驟S25:根據(jù)邏輯數(shù)據(jù)查詢語言以及邏輯表與物理表之間的映射關(guān)系在關(guān)系數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)查詢。
[0099]用戶根據(jù)其查詢的需要,根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句即LSQL語句,在進(jìn)行數(shù)據(jù)的查詢時(shí),根據(jù)步驟S23中所建立的物理表與邏輯表之間的映射關(guān)系,將邏輯查詢語句LSQL轉(zhuǎn)化為結(jié)構(gòu)化查詢語句即現(xiàn)有的SQL語句,并將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。本實(shí)施方式中具體的數(shù)據(jù)查詢方式如下:
[0100]根據(jù)所述的邏輯數(shù)據(jù)查詢語言規(guī)則編寫的邏輯查詢語句(本實(shí)施方式中稱為L(zhǎng)SQL查詢語句),獲取邏輯查詢語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將所述的LSQL語句轉(zhuǎn)化成基于物理表的物理查詢語句(即SQL查詢語句),最后通過物理查詢語句在關(guān)系數(shù)據(jù)庫中執(zhí)行完成數(shù)據(jù)的查詢。
[0101]需要說明的是,本實(shí)施方式中的LSQL是一種自定義的語法體系,是為描述問題更方便而設(shè)計(jì),和具體的業(yè)務(wù)系統(tǒng)沒有關(guān)系,對(duì)任何業(yè)務(wù)系統(tǒng)都可以適合,就像是另一種SQL語法,不需要針對(duì)特定的業(yè)務(wù)數(shù)據(jù)才能設(shè)計(jì)出來。邏輯數(shù)據(jù)查詢語法以及邏輯查詢語句并不是唯一的,用戶可以根據(jù)建立的邏輯表,以及邏輯表與業(yè)務(wù)系統(tǒng)所需的維度之間的關(guān)系設(shè)計(jì)出不同風(fēng)格的查詢語法及語句,只要設(shè)計(jì)出的語句及語法能夠體現(xiàn)出邏輯表與業(yè)務(wù)系統(tǒng)數(shù)據(jù)(維度)之間的關(guān)聯(lián)關(guān)系,并可根據(jù)邏輯表與對(duì)應(yīng)物理表之間的映射關(guān)系,完成邏輯語句與物理查詢語句之間的轉(zhuǎn)化即可。[0102]本實(shí)施方式中通過定義一種用于實(shí)現(xiàn)本發(fā)明所述方法及系統(tǒng)的數(shù)據(jù)查詢語法,設(shè)計(jì)完成了系統(tǒng)的邏輯數(shù)據(jù)查詢語言,并基于該語言在關(guān)系數(shù)據(jù)庫中完成查詢,也就是說將基于本發(fā)明的數(shù)據(jù)查詢方式通過邏輯數(shù)據(jù)查詢語言完成查詢語法的定義,然后轉(zhuǎn)化成數(shù)據(jù)庫SQL執(zhí)行。本實(shí)施方式中將基于本發(fā)明體系設(shè)計(jì)的邏輯數(shù)據(jù)查詢語言寫成LSQL語句,步驟S24實(shí)現(xiàn)的是將LSQL轉(zhuǎn)換成數(shù)據(jù)庫SQL執(zhí)行。
[0103]下面結(jié)合具體的實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步說明。
[0104]實(shí)施例
[0105]本實(shí)施例中的業(yè)務(wù)系統(tǒng)為一個(gè)銷售管理系統(tǒng),需要按地區(qū)和時(shí)間管理客戶的訂單和回款,該系統(tǒng)中存在的業(yè)務(wù)數(shù)據(jù)表如圖3所示。
[0106]步驟一、首先,提取該銷售管理系統(tǒng)中所需要用到的各項(xiàng)維度,包括客戶維、地區(qū)維、日期維和產(chǎn)品維,各維度包含的層次具體如下:
[0107]地區(qū)維:國家、省份、城市
[0108]日期維:年、月(包含年信息)、日(包含年月信息)
[0109]確定每個(gè)維度中基礎(chǔ)層和匯總層之間的計(jì)算關(guān)系,具體如下:
[0110]日期維:年=int(月 /100)
[0111]年=year(日)
[0112]月=year(日)*100+month(日)
[0113]如:年為2012,月為 201208,日為 2012-08-01
[0114]地區(qū)維:國家=Ieft (省份,2)
[0115]國家=Ieft(城市,2)
[0116]省份=Ieft(城市,4)
[0117]如:國家為01,省份為0122,城市為01220315
[0118]其中,上述中year ( ), month ()以及l(fā)eft ()都是SQL中的函數(shù),如year (A)表示返回指定日期中的年份的整數(shù),month (A)表示返回指定日期中的月的整數(shù),left (η)表示取一個(gè)字符串中的前η位,如left (省份,2)表示取省份字符串中的前2位。
[0119]步驟二、建立邏輯表以及邏輯表與維度(或者層)的關(guān)聯(lián)關(guān)系,具體如下:
[0120]a)建立邏輯上描述業(yè)務(wù)數(shù)據(jù)的邏輯表,邏輯表由若干邏輯字段構(gòu)成
[0121]本實(shí)施例的銷售管理系統(tǒng)根據(jù)業(yè)務(wù)需要,建立的邏輯表及每個(gè)邏輯表所包含的邏輯字段具體如下:
[0122]訂單表(訂單id,客戶,發(fā)貨日期,簽單日期,產(chǎn)品,金額)
[0123]回款表(回款id,客戶,日期,金額)
[0124]客戶表(客戶ID,客戶名稱,所在地區(qū))
[0125]城市表(城市id,城市名稱)
[0126]省份表(省份id,省份名稱)
[0127]國家表(國家id,國家名稱)
[0128]產(chǎn)品表(產(chǎn)品ID,產(chǎn)品名稱)
[0129]b)建立邏輯表與維度之間的關(guān)聯(lián)關(guān)系
[0130]通過確定邏輯表的外鍵與主鍵,建立邏輯表與維度之間的關(guān)聯(lián)。將邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段,邏輯表的主鍵為一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組。
[0131]本實(shí)施例中邏輯表外鍵與主鍵的確定結(jié)果如表4和表5所示,圖4與圖5中只示出了訂單表、回款表和客戶表的外鍵及主鍵的確定結(jié)果,對(duì)于訂單表,其外鍵為客戶、簽單日期、產(chǎn)品和發(fā)貨日期,主鍵為訂單ID ;對(duì)于回款表,其外鍵是客戶和日期,主鍵為回款I(lǐng)D ;對(duì)于客戶表,其外鍵為客戶ID和所在地區(qū),主鍵為客戶ID。
[0132]通過該步驟就將原來網(wǎng)狀的表關(guān)系模型變成了總線式的數(shù)據(jù)模型,表之間沒有直接關(guān)系,所有表都與維(類似一條總線)建立關(guān)聯(lián)。
[0133]步驟三、建立物理表與邏輯表之間的映射關(guān)系,具體如下:
[0134]a)從現(xiàn)成的數(shù)據(jù)庫中取出物理表結(jié)構(gòu),本實(shí)施例中的物理表結(jié)構(gòu)如下:
[0135]order(orderld, customer, signDate, product, deliverDate, amount)
[0136]income(incomeld, customer, date, amount)
[0137]customer(customerID, customerName, area)
[0138]city (cityID, cityName)
[0139]province(provincelD, provinceName)
[0140]country (countryID, countryName)
[0141]product(productID, productName)
[0142]本實(shí)施例中為了區(qū)分物理表與邏輯表,步驟二中的邏輯表用中文描述,該步驟中的物理表用英文描述。
[0143]b)針對(duì)每個(gè)邏輯表,在物理表中選擇若干主鍵相同的基表與之對(duì)應(yīng),確保證邏輯表每個(gè)字段都能夠由這些基表計(jì)算出來,本實(shí)施例中邏輯表與基表的對(duì)應(yīng)關(guān)系如下:
[0144]order-)訂單表 income-)回款表 customer-)客戶表
[0145]city-)城市表 province-)省份表 country-)國家表
[0146]product-)產(chǎn)品表
[0147]c)建立邏輯主鍵與每個(gè)基表主鍵之間的映射關(guān)系
[0148]order, orderID-)訂單表.訂單 ID
[0149]income.1ncomeID-)回款表.回款 ID
[0150]customer.customerID-〉客戶表.客戶 ID
[0151]city.cityID-〉城市表.城市 ID
[0152]province.provincelD-〉省份表.省份 ID
[0153]country.countryID-)國家表.國家 ID
[0154]product.productID-〉產(chǎn)品表.產(chǎn)品 ID
[0155]本實(shí)施例中邏輯表的主鍵與基表主鍵之間是 對(duì)應(yīng)的關(guān)系,如邏輯訂單表的主鍵訂單ID與物理表order的orderID對(duì)應(yīng)。
[0156]d)建立其它非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系,即為每個(gè)邏輯字段定義一個(gè)由基表字段構(gòu)成的表達(dá)式,最常見的情況是邏輯字段直接對(duì)應(yīng)某個(gè)基表字段。
[0157]本實(shí)施例中中完成步驟c和步驟d后的結(jié)構(gòu)如下表所示:
[0158]
【權(quán)利要求】
1.一種數(shù)據(jù)查詢方法,包括以下步驟: (1)抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度; (2)建立所述業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;所述的邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù); (3)根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系;所述的物理表用于存儲(chǔ)業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù); (4)根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句LSQL; (5)依據(jù)物理表與邏輯表之間的映射關(guān)系,將邏輯查詢語句LSQL轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL,并將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。
2.如權(quán)利要求1所述的一種數(shù)據(jù)查詢方法,其特征在于,步驟(1)中,在抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度時(shí),還包括抽取各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系;所述的各項(xiàng)維度的層次包括基礎(chǔ)層和匯總層;所述的匯總層是指該層次能夠由其它一個(gè)或多個(gè)基礎(chǔ)層次計(jì)算出來。
3.如權(quán)利要求1或2所述的一種數(shù)據(jù)查詢方法,其特征在于,步驟(2)中,所述的邏輯表包括若干邏輯字段,建立邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系的具體方式為: 將邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段,邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組。
4.如權(quán)利要求3所述的一種數(shù)據(jù)查詢方法,其特征在于,建立物理表與邏輯表之間的映射關(guān)系的具體方式為: a)在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來; b)建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系; c)建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系。
5.如權(quán)利要求4所述的一種數(shù)據(jù)查詢方法,其特征在于,步驟a)中,根據(jù)邏輯表所描述的業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)范圍確定與其對(duì)應(yīng)的基表。
6.如權(quán)利要求5所述的一種數(shù)據(jù)查詢方法,其特征在于,步驟c)中,所述的邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系是指邏輯表中的每個(gè)邏輯字段由基表字段構(gòu)成的表達(dá)式表不。
7.如權(quán)利要求1至6之一所述的一種數(shù)據(jù)查詢方法,其特征在于,步驟(5)中,將LSQL查詢語句轉(zhuǎn)化為SQL語句的具體方式為: 根據(jù)所述的邏輯數(shù)據(jù)查詢語句LSQL獲取語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將LSQL語句轉(zhuǎn)化成基于物理表的SQL查詢語句。
8.一種數(shù)據(jù)查詢系統(tǒng),包括: 維度抽取模塊,用于抽取業(yè)務(wù)系統(tǒng)中的各項(xiàng)維度; 邏輯表建立模塊,建立所述業(yè)務(wù)系統(tǒng)的若干邏輯表,并建立各邏輯表與所述的維度之間的關(guān)聯(lián)關(guān)系;所述的邏輯表用于描述業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù); 映射關(guān)系建立模塊,用于根據(jù)業(yè)務(wù)系統(tǒng)的物理表,建立物理表與各邏輯表之間的映射關(guān)系; 邏輯查詢語句設(shè)計(jì)模塊,用于根據(jù)邏輯表以及按規(guī)則定義的邏輯數(shù)據(jù)查詢語法,編寫邏輯查詢語句LSQL ; 數(shù)據(jù)查詢模塊,用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL,并將SQL語句在數(shù)據(jù)庫中執(zhí)行以完成業(yè)務(wù)數(shù)據(jù)的查詢。
9.如權(quán)利要求8所述的一種數(shù)據(jù)查詢系統(tǒng),其特征在于,所述的維度抽取模塊還用于抽取各項(xiàng)維度所包含的層次,并確定各項(xiàng)維度的層次之間的計(jì)算關(guān)系;所述的各項(xiàng)維度的層次包括基礎(chǔ)層和匯總層;所述的匯總層是指該層次能夠由其它一個(gè)或多個(gè)基礎(chǔ)層次計(jì)算出來。
10.如權(quán)利要求9所述的一種數(shù)據(jù)查詢系統(tǒng),其特征在于,所述的邏輯表建立模塊包括: 外鍵設(shè)置單元,用于設(shè)置邏輯表的外鍵,邏輯表的外鍵設(shè)置為指向某個(gè)維度或者某個(gè)維度的層次的字段; 主鍵設(shè)置單元,用于設(shè)置邏輯表的主鍵,邏輯表的主鍵為邏輯表中一個(gè)取值唯一的字段或者多個(gè)取值唯一的字段組。
11.如權(quán)利要求10所述的一種數(shù)據(jù)查詢系統(tǒng),其特征在于,所述的映射關(guān)系建立模塊包括: 基表選擇單元,用于在物理表中選擇與每個(gè)邏輯表相對(duì)應(yīng)的基表,邏輯表中的每個(gè)邏輯字段都能夠由所述的基表計(jì)算而來; 主鍵關(guān)系建立單元,用于建立邏輯表的主鍵與基表主鍵之間的映射關(guān)系; 字段關(guān)系建立單元,用于建立邏輯表中非主鍵邏輯字段與基表字段之間的計(jì)算關(guān)系。
12.如權(quán)利要求8至11之一所`述的一種數(shù)據(jù)查詢系統(tǒng),其特征在于,所述的數(shù)據(jù)查詢模塊包括: 語句轉(zhuǎn)換單元,用于依據(jù)物理表與邏輯表之間的映射關(guān)系將邏輯查詢語句LSQL語句轉(zhuǎn)化為結(jié)構(gòu)化查詢語句SQL語句,轉(zhuǎn)換的具體方式為: 根據(jù)所述的邏輯數(shù)據(jù)查詢語句LSQL獲取語句中的業(yè)務(wù)數(shù)據(jù)項(xiàng),根據(jù)所述的業(yè)務(wù)數(shù)據(jù)項(xiàng)以及邏輯表與物理表之間的映射關(guān)系,將LSQL語句轉(zhuǎn)化成基于物理表的SQL查詢語句;查詢單元,用于將SQL語句在數(shù)據(jù)庫中執(zhí)行完成業(yè)務(wù)數(shù)據(jù)的查詢。
【文檔編號(hào)】G06F17/30GK103577590SQ201310561848
【公開日】2014年2月12日 申請(qǐng)日期:2013年11月12日 優(yōu)先權(quán)日:2013年11月12日
【發(fā)明者】蔣步星 申請(qǐng)人:北京潤乾信息系統(tǒng)技術(shù)有限公司