摘要:某武器試驗資源庫系統(tǒng)中,針對擁有不同參數(shù)數(shù)據(jù)的武器型號入庫問題,提出了一種基于參數(shù)字典的動態(tài)數(shù)據(jù)庫設(shè)計方法。該方法通過參數(shù)結(jié)構(gòu)表、參數(shù)字典表、數(shù)值數(shù)據(jù)表實現(xiàn)動態(tài)結(jié)構(gòu),較好地解決了J2EE平臺下SSH2不能通過增加數(shù)據(jù)表的方式實現(xiàn)動態(tài)數(shù)據(jù)庫的問題。在動態(tài)數(shù)據(jù)庫的管理中,針對參數(shù)字典更新的“少次、大量”的原則,提出并實現(xiàn)了3種參數(shù)字典更新模式:參數(shù)字典模板導入模式、瀏覽器端直接輸入模式、工作表導入模式。經(jīng)系統(tǒng)驗證,很好地滿足了要求。
關(guān)鍵詞:動態(tài)數(shù)據(jù)庫;參數(shù)字典;J2EE;SSH2;動態(tài)結(jié)構(gòu)
中圖分類號:TN91934文獻標識碼:A文章編號:1004373X(2012)18002203
引言
某武器試驗資源庫系統(tǒng),面向多種武器裝備,支持數(shù)值、文本、圖形、圖像、視頻、音頻、模型組件和仿真工具等多種數(shù)據(jù)格式,是一個綜合的試驗信息管理系統(tǒng)。系統(tǒng)數(shù)據(jù)庫包括音頻庫、圖形圖像庫、模型和仿真工具庫、文本庫、以及數(shù)值數(shù)據(jù)庫。因為數(shù)值數(shù)據(jù)是每次試驗武器性能的總結(jié)以及武器改進的重要依據(jù),所以存放數(shù)值數(shù)據(jù)的數(shù)值數(shù)據(jù)庫是實驗資源數(shù)據(jù)庫的重中之重。對于音頻庫、圖形圖像庫、模型和仿真工具庫和文本庫,因具有規(guī)劃好的數(shù)據(jù)結(jié)構(gòu),可以根據(jù)需求設(shè)計固定的數(shù)據(jù)庫及其表結(jié)構(gòu),這種數(shù)據(jù)庫設(shè)計模式可確保良好的數(shù)據(jù)完整性與一致性,在同類型的數(shù)據(jù)庫設(shè)計中已被廣泛應(yīng)用。但是不同武器型號的試驗參數(shù)不可能完全相同,不能使用固定的幾個字段來限定參數(shù)的數(shù)量和種類,所以固定的表結(jié)構(gòu)不能滿足要求,所以系統(tǒng)必須實現(xiàn)動態(tài)數(shù)據(jù)庫。
按照系統(tǒng)的安全性指標、軟件性能指標、適用性指標的要求,選擇J2EE(Java2Platform,EnterpriseEdition)作為開發(fā)平臺。J2EE不但繼承了B/S(Browser/Server)維護和升級方式簡單,成本低,選擇多等優(yōu)點[1],還具有平臺無關(guān)性、開放的標準以及優(yōu)秀的企業(yè)級應(yīng)用程序框架的優(yōu)勢。SSH2是J2EE平臺主流輕量級設(shè)計框架[24],也是本系統(tǒng)所采用的開發(fā)框架。SSH2由Struts2,Spring和Hibernate組成,結(jié)構(gòu)上分為3層,分別是表示層、業(yè)務(wù)邏輯層和持久層。Hibernate作為持久層框架,實現(xiàn)了ORM,把數(shù)據(jù)表映射成持久層對象的形式,簡化了對數(shù)據(jù)庫的操作,大大減少利用HibernateQL從數(shù)據(jù)庫提取數(shù)據(jù)代碼的編寫量和復雜度。系統(tǒng)數(shù)據(jù)表由Hibernate映射成持久層對象,但數(shù)據(jù)表映射成對象類不是實時的,在系統(tǒng)的使用過程中增加的數(shù)據(jù)表不能映射成持久層對象。解決這個問題一般用2種方法:
(1)把動態(tài)數(shù)據(jù)結(jié)構(gòu)持久化成XML格式文件的形式[5];
(2)用HashMap的鍵值映射關(guān)系來實現(xiàn)類似靜態(tài)數(shù)據(jù)庫的列屬性映射關(guān)系[6]。第1種方法只是針對個例,應(yīng)用不廣,第2種方法的代碼量大,而且對數(shù)據(jù)庫訪問效率有影響。本文提出了一種基于參數(shù)字典的動態(tài)數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和管理方法。
1基于參數(shù)字典的動態(tài)數(shù)據(jù)庫設(shè)計
1.1參數(shù)字典定義
一般的武器試驗數(shù)據(jù)信息包含3個方面:參數(shù)結(jié)構(gòu)、參數(shù)描述、數(shù)值數(shù)據(jù)。參數(shù)字典是相對于數(shù)據(jù)字典而定義的,是指在基于參數(shù)字典設(shè)計的數(shù)據(jù)庫中,用戶可以訪問的參數(shù)元數(shù)據(jù)的目錄,其內(nèi)容包括參數(shù)的名稱、單位、數(shù)據(jù)類型等各種參數(shù)描述。它與數(shù)據(jù)集合有映射關(guān)系,通過數(shù)據(jù)庫設(shè)計,能查詢參數(shù)字典下屬全部數(shù)值數(shù)據(jù)的信息,也可以從數(shù)值數(shù)據(jù)記錄逆向搜索所屬參數(shù)的定義和描述。在某武器試驗資源數(shù)據(jù)庫中,每個武器型號也擁有它自己的參數(shù)字典,型號參數(shù)字典包含于參數(shù)字典。
1.2基于參數(shù)字典的動態(tài)數(shù)據(jù)庫結(jié)構(gòu)
DBMS只能創(chuàng)建靜態(tài)結(jié)構(gòu)的數(shù)據(jù)表,所以動態(tài)可變結(jié)構(gòu)只能通過靜態(tài)數(shù)據(jù)表的“動態(tài)化”來構(gòu)造,即采用靜態(tài)表結(jié)構(gòu)表現(xiàn)動態(tài)表結(jié)構(gòu)[711]。在這個前提下,提出了基于參數(shù)字典的動態(tài)數(shù)據(jù)庫設(shè)計方法。數(shù)據(jù)庫結(jié)構(gòu)設(shè)計如圖1所示。
圖1動態(tài)數(shù)據(jù)庫構(gòu)造模型圖在數(shù)值數(shù)據(jù)表的基礎(chǔ)上新建了3類表:參數(shù)結(jié)構(gòu)表、參數(shù)字典表,參數(shù)字典模板表。數(shù)值數(shù)據(jù)表記錄數(shù)值數(shù)據(jù);參數(shù)字典表記錄所有參數(shù)描述,參數(shù)與數(shù)據(jù)存在一對多的對應(yīng)關(guān)系,在需要參數(shù)信息時可以通過搜索參數(shù)字典表的方式查詢數(shù)據(jù)的基本信息;參數(shù)字典模板表是參數(shù)字典表具有代表意義的參數(shù)子集,在特定情況下可以高效地更新參數(shù)字典;參數(shù)結(jié)構(gòu)表存儲參數(shù)的邏輯從屬結(jié)構(gòu)。從參數(shù)結(jié)構(gòu)表提取結(jié)構(gòu)信息,從參數(shù)索引表提取參數(shù)的基本信息,從數(shù)值數(shù)據(jù)表提取數(shù)值數(shù)據(jù),這樣就可以得到完整的實驗數(shù)據(jù)。擁有特定的參數(shù)字典表存儲所有參數(shù),不存在特定的幾個字段限定參數(shù)的問題,任意多種武器型號試驗數(shù)據(jù)都可以入庫。經(jīng)系統(tǒng)驗證,由此結(jié)構(gòu)設(shè)計的動態(tài)數(shù)據(jù)庫,完全可以滿足數(shù)據(jù)庫設(shè)計的3個基本范式,即:第一范式(無重復列)、第二范式(完全依賴主鍵)以及第三范式(不依賴其他非主屬性)。
2動態(tài)數(shù)據(jù)庫管理
動態(tài)數(shù)據(jù)庫管理主要是對數(shù)值數(shù)據(jù)表對象的檢索、刪除、修改、添加。在本系統(tǒng)中檢索體現(xiàn)為根據(jù)參數(shù)結(jié)構(gòu)來分層檢索;刪除和修改是在檢索基礎(chǔ)上的數(shù)據(jù)操作;而添加數(shù)據(jù)之前必須保證數(shù)據(jù)庫中擁有該型號的參數(shù)字典,否則就必須首先添加型號參數(shù)字典。在基于參數(shù)字典設(shè)計的數(shù)據(jù)庫中,參數(shù)字典表是完成數(shù)據(jù)庫動態(tài)化的最重要所在。在武器試驗資源系統(tǒng)中,參數(shù)字典更新遵循“少次、大量”的原則,對應(yīng)本文設(shè)計了3種參數(shù)字典更新模式:參數(shù)字典模板導入模式、瀏覽器端直接輸入模式、工作表導入模式,如圖2所示。
圖2參數(shù)字典添加的3種模式參數(shù)字典模板導入模式是基于模板的添加參數(shù)字典的方法。當數(shù)據(jù)庫中擁有型號參數(shù)字典模板,而且所要錄入的型號參數(shù)字典與數(shù)據(jù)庫已存模板相似度很大時,采用參數(shù)字典模板導入模式。進入系統(tǒng)后首先要搜索已存模板并選中相近模板,對現(xiàn)模板的武器分系統(tǒng)進行增加、刪除、修改,然后進入目標武器分系統(tǒng)對武器分系統(tǒng)參數(shù)進行增加、刪除、修改,最后把參數(shù)更新到參數(shù)字典表或參數(shù)字典模板表。
瀏覽器端直接輸入模式是一種從無到有地構(gòu)建型號參數(shù)字典的方法。當新增的型號參數(shù)字典記錄比較少或所要錄入的型號參數(shù)字典記錄與數(shù)據(jù)庫已存模板相似度比較小時,采用瀏覽器端直接輸入模式。逐個錄入?yún)?shù)形成武器分系統(tǒng),不同的武器分系統(tǒng)形成型號參數(shù)字典,最后更新到參數(shù)字典表或參數(shù)字典模板表。
有時試驗數(shù)據(jù)在獲取時采用txt的存儲格式,這種情況就可以首先手動把txt文件轉(zhuǎn)成更為規(guī)范、更好讀取的工作表格式,然后通過程序讀取。這種情況就需要工作表導入模式,它是從工作表中導入型號參數(shù)字典的方法。錄入前必須把數(shù)據(jù)對象轉(zhuǎn)成工作表且需要設(shè)定導入?yún)?shù)集在工作表里的格式,如工作表首列為導入?yún)?shù)或首行為導入?yún)?shù),然后以武器分系統(tǒng)為基本單位整體導入,最后更新到參數(shù)字典表或參數(shù)字典表。
在參數(shù)字典添加完成之后,設(shè)定好參數(shù)結(jié)構(gòu)、參數(shù)描述,完成錄入數(shù)值數(shù)據(jù)后,實驗數(shù)據(jù)的添加結(jié)束。若型號參數(shù)字典存在,只需錄入?yún)?shù)結(jié)構(gòu)和參數(shù)描述即完成錄入。
3某武器實驗資源動態(tài)數(shù)據(jù)庫構(gòu)建實例
某武器試驗資源的動態(tài)數(shù)據(jù)庫設(shè)計中使用了4類表:型號參數(shù)字典表,記錄每一個型號每一個參數(shù)的基本信息如:參數(shù)名、參數(shù)單位、所屬武器分系統(tǒng)、數(shù)據(jù)密級;型號參數(shù)結(jié)構(gòu)表,記錄型號參數(shù)結(jié)構(gòu)信息,此類表包含4個從上到下的表:型號表、階段表、數(shù)據(jù)類型表以及武器編號表;型號參數(shù)字典模板表,記錄某些典型型號參數(shù)字典;型號數(shù)值數(shù)據(jù)表,記錄型號具體實驗數(shù)值數(shù)據(jù)。
在錄入型號數(shù)據(jù)時,它的3個方面:參數(shù)結(jié)構(gòu)、數(shù)值數(shù)據(jù)、參數(shù)描述,需要分別對應(yīng)錄入到3類數(shù)據(jù)表中,即參數(shù)結(jié)構(gòu)錄入到型號參數(shù)結(jié)構(gòu)的4類表;數(shù)值數(shù)據(jù)錄入到型號數(shù)值數(shù)據(jù)表;參數(shù)描述錄入到型號參數(shù)字典表。在型號的參數(shù)字典不存在時,首先把各個參數(shù)的參數(shù)描述錄入到型號參數(shù)字典表。瀏覽器端導入模式和參數(shù)子彈模板導入模式完成的最后結(jié)構(gòu)如圖3所示,選擇保存到參數(shù)字典表或者參數(shù)字典模板表,工作表錄入模式如圖4所示,選擇工作表后導入到參數(shù)字典表或參數(shù)字典模板表。