孫仁鵬 吳聰 卞光亮
摘要:MIS系統(tǒng)的查詢模塊一般與數(shù)據(jù)庫和業(yè)務緊耦合、不通用,不能滿足一些特定的應用場景。為解決該不足,基于數(shù)據(jù)字典和用戶數(shù)據(jù)字典來設計查詢,并且將查詢權(quán)限融入設計。查詢自定義模塊根據(jù)鏈接的數(shù)據(jù)庫產(chǎn)品類別,定位存放查詢對象和查詢字段的數(shù)據(jù)字典表,翻譯查詢信息至用戶數(shù)據(jù)字典表,然后查詢模塊提取翻譯的查詢信息,由終端用戶選擇和輸入條件,實現(xiàn)靈活動態(tài)查詢,并對查詢結(jié)果進行統(tǒng)計和輸出。同時,為用戶動態(tài)分配權(quán)限,權(quán)限的粒度可控制到字段。系統(tǒng)動態(tài)鏈接數(shù)據(jù)庫、動態(tài)生成界面、動態(tài)生成SQL、動態(tài)設置權(quán)限、動態(tài)數(shù)據(jù)處理,實現(xiàn)了查詢的通用性和自適應數(shù)據(jù)庫的變遷,實際應用效果較好。
關鍵詞:通用查詢;數(shù)據(jù)字典;查詢權(quán)限;自適應數(shù)據(jù)庫變遷;動態(tài)界面
DOIDOI:10.11907/rjdk.161380
中圖分類號:TP392
文獻標識碼:A 文章編號:1672-7800(2016)005-0169-02
0 引言
MIS系統(tǒng)查詢模塊往往面向特定數(shù)據(jù)庫、特定企業(yè)業(yè)務,與具體數(shù)據(jù)庫應用系統(tǒng)緊密耦合,不通用。正是這種不通用,導致一些實際場景想查看數(shù)據(jù)就顯得非常不便。比如:數(shù)據(jù)庫初始化、導庫已完成,想查看數(shù)據(jù)是否正確或完整;業(yè)務系統(tǒng)還沒有正式上線,想驗證封裝業(yè)務的sql語句執(zhí)行的結(jié)果否正確;一線員工往往無權(quán)使用企業(yè)業(yè)務系統(tǒng),但是隨時想查看自己每天的工作量有沒有被弄錯等。另外,用戶可能需要根據(jù)各個屬性的各種組合條件選擇性地查詢需要的實體屬性,靈活方便查詢。自適應數(shù)據(jù)庫變遷的通用查詢系統(tǒng)由于通用,難以實現(xiàn)豐富的個性化查詢圖表報表需求,但是有其應用需求,而這方面的研究并不多見。
1 研究思路
自適應數(shù)據(jù)庫變遷的通用查詢系統(tǒng)需滿足通用性、靈活性和翻譯性。通用性指不因查詢需求的多少和改變而修改程序,不因數(shù)據(jù)庫結(jié)構(gòu)的改變或數(shù)據(jù)庫的變遷而修改程序。靈活性指查詢項由用戶選擇,查詢條件由用戶動態(tài)輸入和組合,查詢結(jié)果可統(tǒng)計、可寫入Excel,查詢權(quán)限的粒度可細到字段。翻譯性指查詢需求信息具有國際化功效,能自適應不同語言的用戶。
1.1 查詢sql語句與查詢系統(tǒng)分離
顯然,查詢sql語句不能事先嵌入到查詢程序中,因為查詢系統(tǒng)是通用的,事先不知道查詢需求和數(shù)據(jù)庫情況,查詢程序只是查詢運行的平臺。
1.2 數(shù)據(jù)字典實現(xiàn)通用性
數(shù)據(jù)字典記錄了數(shù)據(jù)庫的總體信息,包括表、視圖、字段名、類型等,其維護工作也由數(shù)據(jù)庫服務器自動完成。用戶查詢需求用視圖封裝,自動存放在數(shù)據(jù)字典中。當有新的查詢需求時,就編寫相應的視圖,只不過該視圖一般不含任何參數(shù),具體參數(shù)是通過查詢軟件傳遞過來并動態(tài)構(gòu)建查詢sql,從視圖對應的數(shù)據(jù)集中提取用戶所需的子集。對于業(yè)務復雜的查詢需求,即不能直接用視圖來表達,可以通過業(yè)務系統(tǒng)或存儲過程的執(zhí)行,將執(zhí)行結(jié)果集存于中間表中,然后再用視圖封裝。通過對數(shù)據(jù)字典的設計來對數(shù)據(jù)庫表進行管理和控制,實現(xiàn)應用程序和表結(jié)構(gòu)的分離,開發(fā)人員僅需在查詢定義中引入完善的數(shù)據(jù)字典,即可完成系統(tǒng)定制查詢功能。
1.3 查詢翻譯
數(shù)據(jù)字典中存放視圖和表等數(shù)據(jù)庫服務器端對象信息,也存放其對應的字段信息。從數(shù)據(jù)字典中提取查詢需求(在數(shù)據(jù)庫服務器端以視圖和字段形式表現(xiàn)),動態(tài)生成查詢翻譯界面,翻譯成用戶可理解的語言,包括視圖名和對應字段的翻譯。查詢需求和翻譯的對應關系,即翻譯結(jié)果保存在用戶數(shù)據(jù)字典中。一個用戶數(shù)據(jù)字典表存放視圖、表對象和對應的翻譯信息,比如視圖名、視圖中文名等;另一個用戶數(shù)據(jù)字典表存放對應字段名和中文名。查詢翻譯需要操作存放對象的數(shù)據(jù)字典表和存放對象對應字段的數(shù)據(jù)字典表,對象的約束條件為視圖,存放翻譯結(jié)果的對應兩個用戶數(shù)據(jù)字典表。顯然,查詢翻譯不是給終端用戶用來查詢數(shù)據(jù),而是給了解企業(yè)數(shù)據(jù)庫信息的工作者用來完成查詢設置的,即將數(shù)據(jù)庫中定義的查詢需求信息翻譯成用戶可理解的語言,方便不同語言用戶。
1.4 查詢
查詢翻譯的結(jié)果是供查詢程序使用。查詢程序根據(jù)用戶數(shù)據(jù)字典和用戶選擇的查詢需求動態(tài)生成查詢界面,根據(jù)用戶選擇的查詢需求、字段信息和輸入的查詢條件(字段的精確值、模糊值和范圍),再映射回用戶數(shù)據(jù)字典,構(gòu)建最終所需的完整SQL語句,輸出查詢結(jié)果。
1.5 查詢結(jié)果處理
對查詢結(jié)果設定匯總和統(tǒng)計功能,完成查詢范圍中數(shù)值型字段的匯總統(tǒng)計,實現(xiàn)查詢結(jié)果和匯總結(jié)果寫入到Excel文件中。
1.6 權(quán)限管理
基于角色—用戶—權(quán)限進行權(quán)限管理,為用戶分配角色,為角色分配查詢項,包括分配查詢對象和查詢字段,不同用戶登錄后能夠查詢不同的內(nèi)容。
1.7 自適應數(shù)據(jù)庫變遷
JAVA的數(shù)據(jù)庫訪問技術(shù)JDBC可為不同關系數(shù)據(jù)庫提供統(tǒng)一訪問,通過加載不同的數(shù)據(jù)庫驅(qū)動訪問不同數(shù)據(jù)庫產(chǎn)品,同時將加密數(shù)據(jù)庫鏈接信息寫入配置文件,實現(xiàn)自適應對不同數(shù)據(jù)庫的訪問。通過操作數(shù)據(jù)庫元數(shù)據(jù),獲取數(shù)據(jù)庫產(chǎn)品和版本,獲取不同數(shù)據(jù)庫產(chǎn)品存放視圖和字段的數(shù)據(jù)字典信息。
2 關鍵實現(xiàn)
2.1 表設計
不同數(shù)據(jù)庫產(chǎn)品,數(shù)據(jù)字典表名不同,下面以oracle產(chǎn)品為例說明。數(shù)據(jù)字典表user_objects記錄了數(shù)據(jù)庫對象信息,user_tab_cols記錄了對象與字段的關系及字段類型。用戶數(shù)據(jù)字典表tablename記錄數(shù)據(jù)庫服務器端視圖名和供客戶理解的翻譯信息對應關系,比如中英文對應關系;columnname記錄中英文字段對應關系、字段類型、屬于哪個對象和顯示順序等信息;querycondition記錄用戶常用的查詢,以免重復選擇查詢字段和輸入查詢條件。用戶權(quán)限表role、acount、roleaccount和rolepermission用于權(quán)限管理,控制用戶查詢權(quán)限,權(quán)限粒度可到字段。以自定義的部分用戶數(shù)據(jù)表為例說明。
2.2 數(shù)據(jù)庫鏈接
鏈接模塊從界面配置數(shù)據(jù)庫URL信息、從配置文件讀取驅(qū)動名,創(chuàng)建用戶數(shù)據(jù)字典表和權(quán)限管理相關表,生成權(quán)限管理的Root角色和管理員賬號密碼,為系統(tǒng)作初始化配置。
2.3 查詢自定義
查詢自定義需要Root角色的賬號,功能包括將視圖翻譯成用戶可理解的文字信息和查詢權(quán)限管理。程序從user_tab_cols表中取出視圖對象,選擇一個視圖對象時,再從user_tab_cols表中取出對應字段名,動態(tài)顯示在界面上。如果該視圖名和對應的字段名已進行了中英文翻譯,則在界面上顯示相應的中英文翻譯結(jié)果,并可修改,也可設定字段的顯示順序??梢越o角色分配視圖和視圖中的字段,用戶的權(quán)限可以細化到字段的查詢。
2.4 查詢
用戶登錄后,根據(jù)權(quán)限、所選的中文對象名(視圖翻譯)、中文字段名(字段翻譯)和用戶輸入的條件,映射對應的視圖名和字段名,動態(tài)構(gòu)建SQL語句。根據(jù)tablename中翻譯信息動態(tài)生成查詢需求,根據(jù)用戶選擇的查詢需求和columnname中翻譯的信息動態(tài)生成查詢界面中相應文本框、復選框、標簽和日期等控件;根據(jù)用戶的選擇、輸入和數(shù)據(jù)字典中信息,生成查詢結(jié)果。字段值可精確查詢,也可模式匹配查詢(在文本框前后加上%),也可在一定范圍內(nèi)查詢(在左右文本框中分別輸入值)。也可將經(jīng)常使用的查詢信息命名保存起來,下次直接選擇已有的查詢設置,避免再次選擇和輸入查詢條件。
3 結(jié)語
傳統(tǒng)的查詢模塊與具體應用緊耦合,不同的數(shù)據(jù)庫應用系統(tǒng)需獨立編寫,每次用戶查詢需求變化后都要重新編寫、修改和部署查詢程序。本系統(tǒng)是一個通用查詢工具,能夠自適應數(shù)據(jù)庫的變遷、結(jié)構(gòu)變化和查詢需求變化,可對任何字段進行條件查詢,權(quán)限控制粒度可到每個字段,查詢結(jié)果可統(tǒng)計、可寫入Excel文件,同時具有國際化效果,獨立于具體數(shù)據(jù)庫應用系統(tǒng)。所有變化可通過簡單設置和配置來完成,方便用戶數(shù)據(jù)查詢,是傳統(tǒng)查詢模塊的有益補充。
參考文獻:
[1]王德廣,張軍卒,李文.基于數(shù)據(jù)字典的通用查詢平臺的設計[J].科學技術(shù)與工程,2009,9(19):5850-5851.
[2]任慶東,李永盛,袁文翠等.基于元數(shù)據(jù)驅(qū)動的勘探開發(fā)綜合數(shù)據(jù)庫通用查詢系統(tǒng)[J].大慶石油學院學報,2010,34(6):91-92.
[3]江海龍,吳曉東,邵志驊. 公安交通管理信息系統(tǒng)通用查詢統(tǒng)計模型研究與應用[J]. 交通信息與安,2014,32(4):150-151.
(責任編輯:陳福時)