專利名稱:一種嵌入式數(shù)據(jù)庫自動生成方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫技術(shù),具體涉及一種嵌入式數(shù)據(jù)庫自動生成方法和系統(tǒng)。
背景技術(shù):
基站是無線通信網(wǎng)絡(luò)不可或缺的組成部分,目前基站普遍是由基帶處理單元(BBU)和射頻拉遠(yuǎn)單元(RRU)構(gòu)成的,控制管理好BBU和RRU,基站才能很好的協(xié)作。基站的控制管理工作,絕大部分由基站軟件系統(tǒng)來完成,然而構(gòu)成基站的RRU+BBU硬件變化速度非???,尤其是RRU設(shè)備型號多,更新快,這就給RRU控制管理帶來挑戰(zhàn),是否存在一種可能,RRU控制管理軟件不隨硬件變化而變化,經(jīng)研究這種可能是存在的,只要無線通信的基本原理不變,任何一款基帶或者射頻拉遠(yuǎn)單元硬件結(jié)構(gòu)的變化都不會對其管理軟件造成顛覆性沖擊,前提是要對基站輸入輸出數(shù)據(jù)進(jìn)行很好的管理,通過數(shù)據(jù)管理來屏蔽不同硬件的屬性。數(shù)據(jù)管理的方法很多,RRU+BBU數(shù)據(jù)關(guān)系緊湊,需要關(guān)系數(shù)據(jù)模型來管理,當(dāng)前比較成熟的關(guān)系數(shù)據(jù)庫有SQL Server, Oracle等,但是此類關(guān)系數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)非常復(fù)雜,無謂的消耗掉大量的軟硬件資源,而且存儲過程開發(fā)需要人工參與編寫大量適配用戶視圖與數(shù)據(jù)庫視圖的代碼,極大的增加了無線蜂窩設(shè)備控制管理成本和出錯(cuò)的可能性。所以非常不適合嵌入式軟件系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種嵌入式數(shù)據(jù)庫自動生成方法和系統(tǒng)能夠自動生成輕量級的關(guān)系數(shù)據(jù)庫,解決傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)耗費(fèi)軟硬件資源不適合嵌入式設(shè)備問題。為解決上述技術(shù)問題,本發(fā)明提供了一種嵌入式數(shù)據(jù)庫自動生成方法,包括根據(jù)數(shù)據(jù)庫實(shí)體聯(lián)系(ER)圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。進(jìn)一步地,所述根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件,包括將數(shù)據(jù)庫ER圖解析為數(shù)據(jù)字典文件;將存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,生成存儲過程文件。進(jìn)一步地,所述方法還包括通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼;所述存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。進(jìn)一步地,所述解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫,包括對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;對存儲過程進(jìn)行解析,并生成存儲過程表。進(jìn)一步地,所述方法還包括根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。為解決上述技術(shù)問題,本發(fā)明還提供了一種嵌入式數(shù)據(jù)庫自動生成系統(tǒng),包括數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng),其中所述數(shù)據(jù)庫管理子系統(tǒng),用于根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;所述數(shù)據(jù)庫核心子系統(tǒng),用于解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。進(jìn)一步地,所述數(shù)據(jù)庫管理子系統(tǒng)包括輸入分解模塊,虛擬文檔生成模塊,其中所述輸入分解模塊,用于將數(shù)據(jù)庫ER圖解析后輸出至虛擬文檔生成模塊,以及用于將該存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,輸出至虛擬文檔生成模塊;所述虛擬文檔生成模塊,用于將解析后的數(shù)據(jù)庫ER圖生成所需格式的數(shù)據(jù)庫字典文件;以及用于將解析優(yōu)化后的存儲過程生成存儲過程文件;進(jìn)一步地,所述數(shù)據(jù)庫管理子系統(tǒng)還包括存儲過程虛擬代碼生成模塊,其用于通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼,所述存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。進(jìn)一步地,所述數(shù)據(jù)庫核心子系統(tǒng),包括數(shù)據(jù)字典解析引擎和存儲過程解析引擎,其中所述數(shù)據(jù)字典解析引擎,用于對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;以及用于對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;所述存儲過程解析引擎,用于對存儲過程進(jìn)行解析,并生成存儲過程表。進(jìn)一步地,所述數(shù)據(jù)庫核心子系統(tǒng)還包括數(shù)據(jù)庫查詢模塊,其用于根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。采用本申請的技術(shù)方案,首先可以自動生成輕量級的關(guān)系數(shù)據(jù)庫系統(tǒng),解決傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)耗費(fèi)軟硬件資源不適合嵌入式設(shè)備問題;其次可以自動生成文本化的存儲過程,該存儲過程包含了用戶的空間需求,解決傳統(tǒng)數(shù)據(jù)庫需要手動開發(fā)存儲過程問題,而且為滿足用戶空間需求需要編寫中間適配代碼問題;最后可以解決傳統(tǒng)數(shù)據(jù)庫通用查詢算法效率低,不適合實(shí)時(shí)嵌入式系統(tǒng)設(shè)備的問題。
圖1為實(shí)施例1數(shù)據(jù)庫生成方法流程圖;圖2為實(shí)施例2數(shù)據(jù)庫生成系統(tǒng)結(jié)構(gòu)示意圖3為數(shù)據(jù)庫核心子系統(tǒng)結(jié)構(gòu)示意圖4為數(shù)據(jù)庫核心子系統(tǒng)查詢存儲過程流程圖5為數(shù)據(jù)庫核心子系統(tǒng)查詢算法流程圖6為數(shù)據(jù)庫管理子系統(tǒng)結(jié)構(gòu)示意圖7為輸入分解模塊輸入分解流程圖8為虛擬文檔生成器生成數(shù)據(jù)字典文件和存儲過程文件的流程圖9為存儲過程虛擬代碼生成器生成代碼的流程圖10為數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng)結(jié)構(gòu)示意圖11為數(shù)據(jù)庫和數(shù)據(jù)庫表的構(gòu)建流程圖12為數(shù)據(jù)庫存儲過程解析流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對本發(fā)明
的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。實(shí)施例1本實(shí)施例描述的超輕量級嵌入式數(shù)據(jù)庫自動生成方法,如圖1所示,包括以下步驟步驟101,根據(jù)數(shù)據(jù)庫ER (Entity-Relation,實(shí)體聯(lián)系)圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;具體包括以下步驟步驟1011,將數(shù)據(jù)庫ER圖解析為數(shù)據(jù)字典文件;步驟1012,將存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,生成存儲過程文件。在一個(gè)優(yōu)選實(shí)施例中,還可以包括步驟1013 :通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼。該存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。在存儲過程查詢完成后,所述方法還包括根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。步驟102,解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。具體包括以下步驟步驟1021,對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;步驟1022,對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;步驟1023,對存儲過程進(jìn)行解析,并生成存儲過程表。通過步驟1021、1022和1023完成數(shù)據(jù)庫關(guān)系的建立。實(shí)施例2本實(shí)施例描述的超輕量級嵌入式數(shù)據(jù)庫自動生成系統(tǒng),如圖2所示,包括數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng),其中
數(shù)據(jù)庫管理子系統(tǒng),用于根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;數(shù)據(jù)庫核心子系統(tǒng),用于解析數(shù)據(jù)庫管理子系統(tǒng)生成的數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。上述數(shù)據(jù)庫管理子系統(tǒng)可運(yùn)行于PC機(jī)上,數(shù)據(jù)庫核心子系統(tǒng)可運(yùn)行于嵌入式系統(tǒng)。在一個(gè)優(yōu)選實(shí)施例中,數(shù)據(jù)庫管理子系統(tǒng)包括輸入分解模塊,虛擬文檔生成模塊,其中輸入分解模塊,用于將數(shù)據(jù)庫ER圖解析后輸出至虛擬文檔生成模塊,以及用于將該存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,輸出至虛擬文檔生成模塊;虛擬文檔生成模塊,用于將解析后的數(shù)據(jù)庫ER圖生成所需格式的數(shù)據(jù)庫字典文件;以及用于將解析優(yōu)化后的存儲過程生成存儲過程文件;在一個(gè)優(yōu)選實(shí)施例中,該數(shù)據(jù)庫管理子系統(tǒng)還包括存儲過程虛擬代碼生成模塊,其用于通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼,所述存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。在一個(gè)優(yōu)選實(shí)施例中,數(shù)據(jù)庫核心子系統(tǒng),包括數(shù)據(jù)字典解析引擎和存儲過程解析引擎,其中數(shù)據(jù)字典解析引擎,用于對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;以及用于對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;存儲過程解析引擎,用于對存儲過程進(jìn)行解析,并生成存儲過程表。在一個(gè)優(yōu)選實(shí)施例中,該數(shù)據(jù)庫核心子系統(tǒng)還包括數(shù)據(jù)庫查詢模塊,其用于根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。本發(fā)明實(shí)施例中所描述的系統(tǒng)中的模塊的劃分僅是根據(jù)其功能進(jìn)行劃分的一種示例,可理解地,在實(shí)現(xiàn)相同功能的情況下,本領(lǐng)域技術(shù)人員可給出一種或多種其他功能劃分方式,在具體應(yīng)用時(shí)可將其中任意一個(gè)或多個(gè)功能模塊采用一個(gè)功能實(shí)體裝置或單元實(shí)現(xiàn),例如將數(shù)據(jù)字典解析引擎和存儲過程解析引擎合并為一個(gè)模塊,不可否認(rèn)地,以上變換方式均在本申請保護(hù)范圍之內(nèi)。下面分別對數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng)進(jìn)行介紹實(shí)施例3本實(shí)施例介紹數(shù)據(jù)庫核心子系統(tǒng),數(shù)據(jù)庫核心子系統(tǒng)結(jié)構(gòu)如圖3所示,由數(shù)據(jù)庫查詢模塊、數(shù)據(jù)庫API函數(shù)集模塊、數(shù)據(jù)字典及存儲過程解析引擎模塊、觸發(fā)器模塊和存儲過程對外接口模塊等5個(gè)模塊組成I)數(shù)據(jù)庫查詢模塊該模塊利用關(guān)系代數(shù)的基本原理實(shí)現(xiàn)了通用查詢算法?;驹硎恰叭魏我粋€(gè)元組關(guān)系運(yùn)算表達(dá)式,都可以根據(jù)量詞間的轉(zhuǎn)化關(guān)系,將該表達(dá)式轉(zhuǎn)化為只有與和非關(guān)系的元組關(guān)系表達(dá)式”。利用此原理,數(shù)據(jù)庫查詢模塊將嵌套復(fù)雜的存儲過程自動轉(zhuǎn)換成并列的非嵌套的存儲過程,大大降低了查詢算法的遞歸深度(采用非遞歸方法實(shí)現(xiàn)),從而降低查詢算法的時(shí)間和空間復(fù)雜度,使其更適合嵌入式實(shí)時(shí)系統(tǒng)。2)數(shù)據(jù)庫 API (Application Programming Interface,應(yīng)用程序編程接口)函數(shù)集模塊該模塊是一個(gè)通用數(shù)據(jù)庫函數(shù)集,用于提供存儲過程統(tǒng)一接口,除此之外還包括排序,求最大最小算法等函數(shù)。3)數(shù)據(jù)字典及存儲過程解析引擎模塊用于將特定文件格式數(shù)據(jù)字典以及存儲過程文件恢復(fù)成關(guān)系數(shù)據(jù)庫以及存儲過4)觸發(fā)器模塊用來記錄數(shù)據(jù)的一些操作歷史,以及異常監(jiān)控模塊。5)存儲過程對外接口模塊(圖中未示出)根據(jù)數(shù)據(jù)庫管理子系統(tǒng)生成的代碼(數(shù)據(jù)結(jié)構(gòu))和存儲過程文件,利用數(shù)據(jù)字典及存儲過程解析弓I擎模塊生成數(shù)據(jù)庫存儲過程接口。具體地,數(shù)據(jù)庫核心子系統(tǒng)存儲過程對外接口模塊由以下三部分構(gòu)成部分1:數(shù)據(jù)庫核心子系統(tǒng)的統(tǒng)一存儲過程函數(shù),記在API函數(shù)集中,即該API函數(shù)集中有一部分是對外接口函數(shù),包括查詢、插入、更新、刪除這四個(gè)函數(shù);部分2 :經(jīng)數(shù)據(jù)字典及存儲過程解析引擎模塊將存儲過程文件解析成內(nèi)存存儲過程信息結(jié)構(gòu);部分3 :數(shù)據(jù)庫管理子系統(tǒng)生成的存儲過程對外接口代碼。存儲過程對外接口是供用戶調(diào)用的接口,上述三部分的關(guān)系是先利用存儲過程對外接口代碼中的數(shù)據(jù)結(jié)構(gòu)(部分3)定義局部變量,并將此局部變量作為對外接口函數(shù)(部分I)中的參數(shù),遍歷內(nèi)存存儲過程信息結(jié)構(gòu)(部分2),找到對應(yīng)結(jié)構(gòu)結(jié)合局部變量的值構(gòu)造圖5核心查詢流程的參數(shù),具體參見圖4流程。圖4是由數(shù)據(jù)庫查詢模塊執(zhí)行的統(tǒng)一查詢存儲過程流程,包括以下步驟步驟201,數(shù)據(jù)庫查詢模塊解析某一查詢過程涉及的SQL元素,包括select元素、from元素和where元素,面向用戶的輸入、輸出元素,以及各元素之間的關(guān)系;步驟202,判斷解析是否成功,如果成功,轉(zhuǎn)步驟203,否則,轉(zhuǎn)步驟210 ;步驟203,構(gòu)造數(shù)據(jù)庫核心算法seach的select元素、from元素和where元素;具體地,根據(jù)用戶(即調(diào)用者)的輸入和該存儲過程在內(nèi)存中的信息結(jié)構(gòu),來構(gòu)造實(shí)際的各元素(select元素、from元素和where元素)的值。步驟204,判斷構(gòu)造是否成功,如果成功,轉(zhuǎn)步驟205,否則,轉(zhuǎn)步驟210 ;步驟205,調(diào)用數(shù)據(jù)庫API函數(shù)查詢;步驟206,判斷查詢是否成功,如果成功,轉(zhuǎn)步驟207,否則,轉(zhuǎn)步驟210 ;步驟207,根據(jù)特殊條件對結(jié)果進(jìn)行特殊處理,包括distinct (去除重復(fù)記錄)、Max (求最大值)、Min (求最小值)、Min&Max (求最大和最小值)、Valid (是否合法半段)、Count (記數(shù));步驟208,判斷處理是否成功,如果成功,轉(zhuǎn)步驟209,否則,轉(zhuǎn)步驟210 ;步驟209,輸出查詢成功;
步驟210,輸出查詢失敗。圖4所示流程是存儲過程對外接口模塊的部分I中的統(tǒng)一查詢接口,輸出結(jié)果用來構(gòu)造圖5所示核心查詢算法的參數(shù),即圖4流程步驟203中構(gòu)造seach的select元素、from元素和where元素,就是用于構(gòu)造圖5所示流程的輸入?yún)?shù),該步驟中的seach就是圖5所示流程的核心查詢算法。數(shù)據(jù)庫核心子系統(tǒng)的查詢算法是在存儲過程優(yōu)化的基礎(chǔ)上在笛卡爾積的基礎(chǔ)上設(shè)計(jì)的性能優(yōu)越的核心查詢算法,其流程如圖5所示,包括以下步驟步驟301,計(jì)算常數(shù)查詢條件個(gè)數(shù);所謂“常數(shù)”就是用戶告知的條件,常數(shù)查詢就是過濾、縮小笛卡爾積的過程。步驟302,判斷查詢條件數(shù)組符合要求,如果是,轉(zhuǎn)步驟303,否則結(jié)束;需要說明的是,常數(shù)查詢須在表查詢之前執(zhí)行,在執(zhí)行常數(shù)查詢時(shí),優(yōu)選界面為左側(cè)為待查詢表,右側(cè)為常數(shù)。步驟303,將所有表元素復(fù)制到數(shù)組awValidTableElementldx,生成數(shù)組awValidRecordNum ;數(shù)組awValidTableElementldx用于記錄表中有效記錄的序號(索引),數(shù)組awValidRecordNum用于記錄表中有效記錄個(gè)數(shù);步驟304,判斷是否所有表均有數(shù)據(jù),如果是,轉(zhuǎn)步驟305,否則結(jié)束;
步驟305,執(zhí)行第一個(gè)常數(shù)查詢條件;
步驟 306,更新數(shù)組 awValidTableElementldx,更新數(shù)組 awValidRecordNum ;
步驟307,判斷常數(shù)查詢條件是否查詢完,如果是,轉(zhuǎn)步驟310,否則轉(zhuǎn)步驟308 ;
步驟308,執(zhí)行下一個(gè)常數(shù)查詢條件;
步驟 309,更新數(shù)組 awValidTableElementldx,更新數(shù)組 awValidRecordNum,轉(zhuǎn)步驟307I
判斷310,判斷是否存在表查詢條件,如果是,轉(zhuǎn)步驟311,否則轉(zhuǎn)步驟316;
步驟311,執(zhí)行第一個(gè)表查詢條件;
表查詢用于查出符合用戶告知的條件的集合。
步驟312,生成數(shù)組awQueryResult ;
數(shù)組awQueryResult用于記錄查詢結(jié)果。
步驟313,判斷表查詢條件是否查詢完,如果是,轉(zhuǎn)步驟316,否則轉(zhuǎn)步驟314 ;
步驟314,執(zhí)行下一個(gè)表查詢條件;
步驟315,更新數(shù)組awQueryResult,轉(zhuǎn)步驟313 ;
步驟316,生成查詢結(jié)果,結(jié)束。
實(shí)施例4
本實(shí)施例介紹數(shù)據(jù)庫管理子系統(tǒng),數(shù)據(jù)庫管理子系統(tǒng)結(jié)構(gòu)如圖6所示,用于根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,自動生成數(shù)據(jù)字典文件、存儲過程文件和存儲過程對外接口代碼;
以查詢?yōu)槔?,存儲過程需求文檔的一種可行的格式如下 Select屬性X,屬性y,屬性z from表I,表2where條件,另加用戶的輸入輸出空間描述,具體如下
用戶輸入1,1,4,用戶輸出2,2,2,綜合如下Select屬性x,屬性y,屬性z from表I,表2where條件;1,1,4 ;2, 2,2。數(shù)據(jù)庫管理子系統(tǒng)由輸入分解模塊、虛擬文檔生成器、存儲過程虛擬代碼生成器和輸出分配模塊等4個(gè)模塊組成I)輸入分解模塊本數(shù)據(jù)庫管理子系統(tǒng)支持兩大類文本文件(或稱文檔),分別是數(shù)據(jù)字典(如Viso格式的ER圖或者其他格式的關(guān)系模型,以下統(tǒng)一稱為ER圖)和存儲過程需求文件(格式如上所述)。輸入分解模塊具體作用如下首先對于關(guān)系模型ER圖,則利用該文件數(shù)據(jù)格式,將其解析并存儲于內(nèi)存,并將該解析結(jié)果交予虛擬文檔生成器;其次對于存儲過程需求文檔按照關(guān)系代數(shù)原理優(yōu)化并接卸(將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程),并將解析結(jié)果交予虛擬文檔生成器以及虛擬代碼生成器。具體流程圖如圖7所示,包括以下步驟步驟401,從指定目錄讀入文檔;步驟402,判斷讀入文檔是否大于最大文檔數(shù),如果是,結(jié)束,否則轉(zhuǎn)步驟403 ;步驟403,根據(jù)文檔后綴判斷文檔格式,如果是ER圖,則執(zhí)行步驟404,如果是存儲過程需求文檔,則執(zhí)行步驟406 ;步驟404,將ER圖解析成對應(yīng)文檔格式的內(nèi)存表達(dá)形式;因?yàn)镋R圖格式不同,如visio格式的ER圖,或者其他格式。每一種文檔格式都有其對應(yīng)的內(nèi)存表達(dá)形式。步驟405,將存于內(nèi)存的解析結(jié)果輸入虛擬文檔生成器,返回步驟401繼續(xù)讀入文檔;步驟406,將該存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程(利用現(xiàn)有開源代碼),并解析,將解析結(jié)果存于內(nèi)存;步驟407,將存于內(nèi)存的解析結(jié)果交虛擬文檔生成器和虛擬代碼生成器,返回步驟401,繼續(xù)讀入文檔。2)虛擬文檔生成器該模塊對輸入分解模塊的輸入內(nèi)容,調(diào)用對應(yīng)的文檔生成適配器,生成具有統(tǒng)一格式的數(shù)據(jù)字典文檔和存儲過程文檔,其所生成的存儲過程文檔包含了用戶輸入輸出部分。具體流程如圖8所示,包括以下步驟步驟501,讀入從輸入分解模塊所得解析結(jié)果;步驟502,判斷數(shù)據(jù)格式及內(nèi)容是否處理完,如果數(shù)據(jù)格式為數(shù)據(jù)字典,則轉(zhuǎn)步驟503,如果數(shù)據(jù)格式為存儲過程,則轉(zhuǎn)步驟507,如果數(shù)據(jù)已處理完,則轉(zhuǎn)步驟509 ;步驟503,數(shù)據(jù)格式為數(shù)據(jù)字典,啟動對應(yīng)文檔管理模塊;根據(jù)數(shù)據(jù)庫文件格式選擇相應(yīng)的文檔管理模塊,例如,如果數(shù)據(jù)庫文件格式為Xml,則選擇Xml文檔管理模塊,如果數(shù)據(jù)庫文件格式為Json,則選擇Json文檔管理模塊,此外也可以選擇其他文件格式的文檔管理模塊。步驟504,生成關(guān)系數(shù)據(jù)庫;
利用啟動的文檔管理模塊將該數(shù)據(jù)字典轉(zhuǎn)化為關(guān)系數(shù)據(jù)庫系統(tǒng);步驟505,判斷是否達(dá)到數(shù)據(jù)庫最大表關(guān)系數(shù),如果是,轉(zhuǎn)步驟502,如果否,轉(zhuǎn)步驟 506 ;步驟506,生成表關(guān)系的主鍵信息、外鍵信息,以及屬性信息,返回步驟505 ;步驟507,判斷是否達(dá)到最大存儲過程數(shù),如果是,轉(zhuǎn)步驟502,如果否,轉(zhuǎn)步驟508 ;步驟508,生成包含用戶空間需求的存儲過程,返回步驟507 ;步驟509,生成對應(yīng)文檔,包括數(shù)據(jù)庫關(guān)系文件和存儲過程文件?!?br>
在上述步驟508中,基于上述存儲過程需求文檔的格式,數(shù)據(jù)庫管理子系統(tǒng)會根據(jù)相關(guān)數(shù)字和字符串,進(jìn)行組合,生成具有以下格式的字符串,即將一種格式的文本信息轉(zhuǎn)換成另外一種格式的文本信息,以下是該字符串的json格式“{"Procedue":"RDBS_QUERY_GETMAINCARRBYCELLID", "Operation":2〃In":{"InFiedNum":2,"InFiedBaseInfo":[{"InMode":0,"Index":0,"Lenth":4,"Type":4}, {" InMode":0, "Index":1, "Lenth":1,"Type":1}]},"Out":{"MaxNum":1, "OutFiedNum":2,"OutFiedBaseInfo":[{"lndex":0, 〃IndexSel":0, "Lenth":1, "Type":1}, {"Index":1,^IndexSeI^:1, "Lenth":4, "Type":4}]},"Select":{"SelectNum":2,^SeIectFieIdInfo^:[{"Tablelndex":18, "Fieldlndex〃:0}, {〃TableIndex〃:18, 〃FieldIndex〃:3}]},〃From":{" TableNum":2,"FromTablelnfo":[{"Tablelndex": 19},{" TableInde"Cond":{"CondNum":4,"Condlnfo":[{"CondMode":0,"CmpType":4, "LeftTa bleIndex〃19, 〃LeftFieldIndex〃:3,〃RightTableIndex〃:255,〃RightFieldIndex〃:0},{"CondMode":0,"CmpType":l, "LeftTablelndex":19,"LeftFieldlndex":2,"RightTableIndex〃:255, 〃RightFieldIndex〃:1},{"CondMode":1,"CmpType":l, "LeftTablelndex":19,"LeftFieldlndex":1,"RightTableIndex〃:18, 〃RightFieldIndex〃:0},{"CondMode":1,"CmpType":l, "LeftTablelndex":19,"LeftFieldlndex":0,"RightTableIndex〃:18, 〃RightFieldIndex〃:1}]}},,3)存儲過程虛擬代碼生成器本模塊利用存儲過程需求文檔中的用戶輸入輸出部分,定義相應(yīng)的數(shù)據(jù)結(jié)構(gòu),可以根據(jù)配置要求的語言格式,調(diào)用不同語言格式的代碼生成器,生成所配置語言的文件,其流程如圖9所示,包括以下步驟步驟601,讀入從輸入分解模塊所得解析結(jié)果;步驟602,啟動對應(yīng)代碼生成模塊;根據(jù)數(shù)據(jù)庫語言選擇相應(yīng)的代碼生成器,例如,如果數(shù)據(jù)庫語言為C語言,則選擇C語言代碼生成器,如果數(shù)據(jù)庫語言為C++語言,則選擇C++代碼生成器,此外也可以選擇其他語言的代碼生成器。
步驟603,判斷是否大于最大存儲個(gè)數(shù),如果是,轉(zhuǎn)步驟605,否則轉(zhuǎn)步驟604 ;步驟604,生成對應(yīng)語言字符串,返回步驟603 ;利用啟動的代碼生成器將從輸入分解模塊所得的解析結(jié)果生成對應(yīng)語言字符串。步驟605,將上述過程產(chǎn)生的字符串以文本格式輸出。4)輸出分配模塊用于將虛擬文檔生成器和存儲過程虛擬代碼生成器生成的文件和代碼(即字符串)輸出至配置目錄下,即將數(shù)據(jù)庫管理子系統(tǒng)生成的數(shù)據(jù)字典文件和存儲過程文件以及相關(guān)代碼放在指定目錄中。實(shí)施例5本實(shí)施例介紹數(shù)據(jù)庫核心子系統(tǒng)與數(shù)據(jù)庫管理子系統(tǒng)的關(guān)系,如圖10所示,數(shù)據(jù)庫核心子系統(tǒng)將數(shù)據(jù)庫管理系統(tǒng)生成的數(shù)據(jù)字典文檔以及存儲過程文檔解析,并利用解析結(jié)果創(chuàng)建數(shù)據(jù)庫,初始化數(shù)據(jù)庫,用戶利用存儲過程解析結(jié)果來操作數(shù)據(jù)庫。對數(shù)據(jù)字典文件的解析流程如圖11所示,在對圖11流程說明之前,先介紹一下一次解析和二次解析的概念,一次解析,是利用數(shù)據(jù)字典和存儲過程文件格式的對應(yīng)解析器,將數(shù)據(jù)字典以及存儲過程的文本信息轉(zhuǎn)換成對應(yīng)格式的內(nèi)存表達(dá)方式。而二次解析是對這些存在于內(nèi)存的信息,讀取并組成數(shù)據(jù)庫以及存儲過程特有的內(nèi)存表達(dá)方式。兩次解析的本質(zhì)就是兩次數(shù)據(jù)轉(zhuǎn)換文本數(shù)據(jù)經(jīng)一次解析變成內(nèi)存數(shù)據(jù)經(jīng)二次解析變成數(shù)據(jù)庫格式的內(nèi)存數(shù)據(jù)和存儲過程格式的內(nèi)存數(shù)據(jù)。對數(shù)據(jù)字典文件的解析包括以下步驟步驟701,獲取數(shù)據(jù)庫管理子系統(tǒng)生成的數(shù)據(jù)字典文件;步驟702,判斷獲取文件是否成功,如果成功,轉(zhuǎn)步驟703,否則結(jié)束;步驟703,數(shù)據(jù)字典和存儲過程解析引擎對數(shù)據(jù)字典文件進(jìn)行解析;通過本次解析獲得數(shù)據(jù)庫對象,數(shù)據(jù)庫對象即為對數(shù)據(jù)庫相關(guān)信息的描述;步驟704,判斷解析是否成功,如果成功,轉(zhuǎn)步驟705,否則結(jié)束;步驟705,對數(shù)據(jù)庫對象進(jìn)行二次解析,并根據(jù)解析結(jié)果創(chuàng)建數(shù)據(jù)庫;完成了對數(shù)據(jù)庫對象的解析與創(chuàng)建后,緊接著是對表對象的解析,即將數(shù)據(jù)字典中用文本描述的各個(gè)表信息,進(jìn)行解析。通過步驟705的解析獲得表對象;步驟706,二次解析及創(chuàng)建是否成功,如果成功,則轉(zhuǎn)步驟707’否則結(jié)束;步驟707,獲取表對象個(gè)數(shù);步驟708,以表對象個(gè)數(shù)為索引,判斷表創(chuàng)建是否完畢,如果是,結(jié)束,否則,轉(zhuǎn)步驟709 ;具體地,通過比較創(chuàng)建表的個(gè)數(shù)和獲得的表對象個(gè)數(shù),來進(jìn)行判斷。步驟709,對單個(gè)表對象進(jìn)行二次解析并創(chuàng)建表;步驟710,創(chuàng)建表是否成功,如果成功,轉(zhuǎn)步驟708,否則,結(jié)束。存儲過程解析流程如圖12所示,包括步驟801,獲取存儲過程文件;步驟802,獲取文件是否成功,如果成功,轉(zhuǎn)步驟803,否則結(jié)束;步驟803,利用文件解析引擎對該文件進(jìn)行一次解析;步驟804,判斷解析是否成功,如果成功,轉(zhuǎn)步驟805,否則結(jié)束;
步驟805,獲取存儲過程個(gè)數(shù);步驟806,判斷存儲過程解析是否完畢,如果完畢,結(jié)束,如果未完畢,轉(zhuǎn)步驟807 ;步驟807,對單個(gè)存儲過程進(jìn)行二次解析,生成存儲過程表;步驟808,判斷二次解析是否成功,如果是,轉(zhuǎn)步驟806,否則結(jié)束。對本發(fā)明實(shí)施的技術(shù)方案的主要實(shí)現(xiàn)原理具體實(shí)施方式
及其相應(yīng)能夠達(dá)到的有益效果進(jìn)行詳細(xì)地闡述。案例IRRU設(shè)備數(shù)據(jù)庫使用本系統(tǒng)的生成過程步驟1:設(shè)計(jì)該設(shè)備的關(guān)系模型ER圖,搜集存儲過程需求文檔,將此文檔作為數(shù)據(jù)庫管理子系統(tǒng)的輸入;步驟2 :將數(shù)據(jù)庫管理子系統(tǒng)的輸出自動復(fù)制到數(shù)據(jù)庫核心子系統(tǒng)所在目錄;步驟3 :編譯生成RRU軟件版本,并在該類RRU設(shè)備上運(yùn)行數(shù)據(jù)庫核心,至此RRU的數(shù)據(jù)庫得以產(chǎn)生。案例2一體化站數(shù)據(jù)庫使用本系統(tǒng)的生成過程。步驟1:設(shè)計(jì)該設(shè)備的關(guān)系模型ER圖,搜集存儲過程需求文檔,將此文檔作為數(shù)據(jù)庫管理子系統(tǒng)的輸入;步驟2:將數(shù)據(jù)庫管理子系統(tǒng)的輸出(數(shù)據(jù)字典,存儲過程文檔)自動復(fù)制到數(shù)據(jù)庫核心子系統(tǒng)所在目錄;步驟3 :編譯生成一體化軟件版本,并在該類一體化站上運(yùn)行數(shù)據(jù)庫核心,至此一體化站的數(shù)據(jù)庫已產(chǎn)生。綜上兩案例,可以看出本申請可以實(shí)現(xiàn)自動生成基站設(shè)備數(shù)據(jù)系統(tǒng),采用本方案產(chǎn)生數(shù)據(jù)庫,可以解決以下問題首先可以自動生成輕量級的關(guān)系數(shù)據(jù)庫系統(tǒng),解決傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)耗費(fèi)軟硬件資源不適合嵌入式設(shè)備問題;其次可以自動生成文本化的存儲過程,由于在存儲過程需求文檔中已經(jīng)包含用戶空間需求,因此該存儲過程包含了用戶的空間需求,解決傳統(tǒng)數(shù)據(jù)庫需要手動開發(fā)存儲過程問題,而且為滿足用戶空間需求需要編寫中間適配代碼問題;最后可以解決傳統(tǒng)數(shù)據(jù)庫通用查詢算法效率低,不適合實(shí)時(shí)嵌入式系統(tǒng)設(shè)備的問題(數(shù)據(jù)庫核心子系統(tǒng)的通用查詢算法)。本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲于計(jì)算機(jī)可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種嵌入式數(shù)據(jù)庫自動生成方法,包括根據(jù)數(shù)據(jù)庫實(shí)體聯(lián)系(ER)圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。
2.如權(quán)利要求1所述的方法,其特征在于所述根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件,包括將數(shù)據(jù)庫ER圖解析為數(shù)據(jù)字典文件;將存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,生成存儲過程文件。
3.如權(quán)利要求2所述的方法,其特征在于所述方法還包括通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼;所述存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。
4.如權(quán)利要求1所述的方法,其特征在于所述解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫,包括對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;對存儲過程進(jìn)行解析,并生成存儲過程表。
5.如權(quán)利要求3所述的方法,其特征在于所述方法還包括根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。
6.一種嵌入式數(shù)據(jù)庫自動生成系統(tǒng),包括數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng),其中所述數(shù)據(jù)庫管理子系統(tǒng),用于根據(jù)數(shù)據(jù)庫實(shí)體聯(lián)系(ER)圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;所述數(shù)據(jù)庫核心子系統(tǒng),用于解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于所述數(shù)據(jù)庫管理子系統(tǒng)包括輸入分解模塊,虛擬文檔生成模塊,其中所述輸入分解模塊,用于將數(shù)據(jù)庫ER圖解析后輸出至虛擬文檔生成模塊,以及用于將該存儲過程需求文檔中的需求優(yōu)化,即將嵌套復(fù)雜的存儲過程優(yōu)化成并列非嵌套的存儲過程,解析優(yōu)化后的存儲過程需求文檔,輸出至虛擬文檔生成模塊;所述虛擬文檔生成模塊,用于將解析后的數(shù)據(jù)庫ER圖生成所需格式的數(shù)據(jù)庫字典文件;以及用于將解析優(yōu)化后的存儲過程生成存儲過程文件。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于所述數(shù)據(jù)庫管理子系統(tǒng)還包括存儲過程虛擬代碼生成模塊,其用于通過代碼生成器將解析優(yōu)化后的存儲過程需求文檔生成相應(yīng)語言的存儲過程對外接口代碼,所述存儲過程對外接口代碼用于實(shí)現(xiàn)對存儲過程的查詢。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于所述數(shù)據(jù)庫核心子系統(tǒng),包括數(shù)據(jù)字典解析引擎和存儲過程解析引擎,其中所述數(shù)據(jù)字典解析引擎,用于對數(shù)據(jù)字典文件進(jìn)行解析,獲得數(shù)據(jù)庫對象,并創(chuàng)建數(shù)據(jù)庫;以及用于對數(shù)據(jù)字典文件進(jìn)行解析,獲取表對象,并創(chuàng)建表;所述存儲過程解析引擎,用于對存儲過程進(jìn)行解析,并生成存儲過程表。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于所述數(shù)據(jù)庫核心子系統(tǒng)還包括數(shù)據(jù)庫查詢模塊,其用于根據(jù)用戶輸入的條件進(jìn)行常數(shù)查詢,待對所有表常數(shù)查詢完畢后,執(zhí)行表查詢,查出符合用戶輸入的條件的集合,輸出查詢結(jié)果。
全文摘要
本發(fā)明公開了一種嵌入式數(shù)據(jù)庫自動生成方法和系統(tǒng),能夠自動生成輕量級的關(guān)系數(shù)據(jù)庫,解決傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)耗費(fèi)軟硬件資源不適合嵌入式設(shè)備問題。所述方法包括根據(jù)數(shù)據(jù)庫ER圖和存儲過程需求文檔,生成數(shù)據(jù)字典文件和存儲過程文件;解析數(shù)據(jù)字典文件和存儲過程文件,并利用解析結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)庫關(guān)系表以及存儲過程,得到嵌入式系統(tǒng)的關(guān)系數(shù)據(jù)庫。所述系統(tǒng),包括數(shù)據(jù)庫管理子系統(tǒng)和數(shù)據(jù)庫核心子系統(tǒng)。采用本申請的技術(shù)方案,可以自動生成輕量級的關(guān)系數(shù)據(jù)庫系統(tǒng),解決傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)耗費(fèi)軟硬件資源不適合嵌入式設(shè)備問題。
文檔編號G06F17/30GK102999600SQ20121047207
公開日2013年3月27日 申請日期2012年11月20日 優(yōu)先權(quán)日2012年11月20日
發(fā)明者李保軍 申請人:中興通訊股份有限公司