唐興源,任 真,湛 薇
(甘肅中醫(yī)藥大學,甘肅 蘭州73000)
敦煌醫(yī)學素材數(shù)據(jù)庫中方劑入庫的設(shè)計與實現(xiàn)*
唐興源,任真△,湛薇
(甘肅中醫(yī)藥大學,甘肅 蘭州73000)
從敦煌醫(yī)學方劑素材本身的特點入手進行分析,結(jié)合敦煌醫(yī)學應(yīng)用的實際需求展開功能設(shè)計和數(shù)據(jù)庫設(shè)計,對搜集到的方劑素材進行分析、分類并建立表結(jié)構(gòu),最后通過編程實現(xiàn)敦煌醫(yī)學方劑信息的入庫功能。
敦煌醫(yī)學;方劑入庫;數(shù)據(jù)庫
1.1系統(tǒng)分析
敦煌遺書共約5萬卷,其中醫(yī)學卷子約100種,設(shè)計卷號達28個左右。據(jù)統(tǒng)計,這些醫(yī)學卷子載有至少約1100余首中醫(yī)方劑,主要包括內(nèi)、外、婦、兒、五官、口腔、皮膚等臨床各科方劑,以及食療方劑與特色鮮明的佛教道教方劑等[1]。為使研究人員根據(jù)個人需要、意愿對敦煌醫(yī)學方劑進行查詢與使用,對敦煌醫(yī)學中比較繁雜的、常用的中醫(yī)方劑進行搜集、分類和處理[2],并將其以計算機可識別的方式存儲在關(guān)系型數(shù)據(jù)庫中,實現(xiàn)敦煌醫(yī)學方劑的數(shù)字化存儲,從而為研究人員帶來更大的便捷。
1.2功能設(shè)計
將數(shù)據(jù)庫技術(shù)應(yīng)用到敦煌醫(yī)學方劑的管理與存儲上,有效地實現(xiàn)了其數(shù)字化。對敦煌醫(yī)學方劑的入庫檢索功能做以下功能設(shè)計:
1)多樣化的檢索方式:①研究人員(用戶)可以通過輸入方劑的拼音首字母檢索;②可以輸入方劑類別檢索,例如:常見的方劑分類有內(nèi)、外、婦、兒科等;③輸入方劑的部分名稱,系統(tǒng)自動模糊匹配調(diào)出相關(guān)方劑信息;④當不知道自己要找哪些方劑時,直接回車鍵,將顯示庫中所有的方劑。注:由于庫中方劑很多,此過程不常用,比較耗費查詢時間;⑤選擇年代,即可檢索出出相應(yīng)年代的方劑。
2)友好的檢索界面。數(shù)據(jù)庫檢索界面友好,操作簡單易懂,只需要按照操作提示即可完成檢索,不需要系統(tǒng)的培訓,節(jié)約了學習操作的時間成本。
3)詳細的檢索內(nèi)容。在數(shù)據(jù)庫設(shè)計階段合理規(guī)劃方劑在表中的存儲結(jié)構(gòu),檢索出來的方劑不僅包括其本身的組成成分,而且還會有具體的適用癥狀和注意事項等內(nèi)容。
1.3數(shù)據(jù)庫設(shè)計
1.3.1概念結(jié)構(gòu)設(shè)計
將搜集、加工、整理好的敦煌醫(yī)學方劑素材進行詳細的分析、分類,提取其共性,并根據(jù)關(guān)系型數(shù)據(jù)庫設(shè)計規(guī)范要求,建立表結(jié)構(gòu)、表間關(guān)系、索引、約束等,實現(xiàn)方劑素材在庫中存儲結(jié)構(gòu)的設(shè)計[3]。經(jīng)過分析,涉及到的主要實體包括方劑信息、分類外碼信息等。
1)方劑信息實體包括方劑名稱、方劑分類、方劑內(nèi)碼、方劑輸入碼、劑型、年代、詳細說明、組成成分、方劑外碼、備注等屬性。
2)分類外碼信息實體包括分類代碼、分類名稱、備注等屬性。
方劑信息和分類外碼信息實體的E-R圖如圖1所示:
圖1 方劑信息和分類外碼信息實體的E-R圖
1.3.2邏輯結(jié)構(gòu)設(shè)計
數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計見表1,表2。
表1 方劑信息結(jié)構(gòu)表
表2 分類外碼信息結(jié)構(gòu)表
在詳細設(shè)計完成后,就需要編碼實現(xiàn)敦煌醫(yī)學方劑素材的入庫功能,具體涉及到界面的布局、與后臺數(shù)據(jù)庫的交互兩個方面。與后臺數(shù)據(jù)庫的交互有方劑信息的增、刪、改、查操作,主要用到結(jié)構(gòu)化查詢語言(SQL)來完成。每次與后臺的交互都會有一個當前時間的記錄,例如:增加一種新方劑,會產(chǎn)生該方劑的入庫時間;修改庫中已有的方劑信息,會記錄修改時間等。界面布局有好多選擇的語言,可以用面向?qū)ο蟪绦蛟O(shè)計語言Java[4]、C#、.net等。這里詳細給出實現(xiàn)敦煌醫(yī)學方劑素材入庫的關(guān)鍵核心代碼:
1)通過getNowTime()函數(shù)獲取當前服務(wù)器時間記錄相關(guān)操作,其核心代碼如下:
publicStringgetNowTime(){
StringgetNowTime=null;
try{
StringstrSQL="";
strSQL="SELECTSUBSTRING(CONVERT(now(),CHAR(19),1,19)ASSYSDATE";
ResultSetrst=stmt.executeQuery(strSQL);
while(rst.next(){
getNowTime=rst.getString("SYSDATE");
}
}catch(Exceptionse){
System.out.println(se.getMessage();
se.printStackTrace();
}
returngetNowTime;
}
2)通過InsertFJ()函數(shù)增加新的方劑信息,實現(xiàn)數(shù)據(jù)庫操作中的“增”操作,其核心代碼如下:
publicbooleanInsertFJ(Stringfjsr,String fjnm,Stringfjwm,Stringzccf,Stringnd,
Stringxxsm, Stringfjfl, Stringfjmc, String jx,Stringbz){
psSQL="INSERTINTOFJXX(FJSR,F(xiàn)JNM,F(xiàn)JWM,ZCCF,ND,XXSM,F(xiàn)JFL,F(xiàn)JMC,JX,BZ)VALUES(";
psSQL=psSQL+"'"+fjsr+"'"+",";
psSQL=psSQL+"'"+fjnm+"'"+",";
psSQL=psSQL+"'"+fjwm+"'"+",";
psSQL=psSQL+zccf+",";
psSQL=psSQL+"'"+nd+"'"+",";
psSQL=psSQL+"'"+xxsm+"'"+",";
psSQL=psSQL+"'"+fjfl+"'"+",";
psSQL=psSQL+"'"+fjmc+"'"+",";
psSQL=psSQL+"'"+jx+"'";
psSQL=psSQL+"'"+bz+"'";
psSQL=psSQL+")";
System.out.println(psSQL);
try{
stmt.executeUpdate(psSQL);
conn.commit();
returntrue;
}catch(SQLExceptione){
System.out.println(e.getMessage();
e.printStackTrace();
}
returnfalse;
}
3)通過updateFJ()函數(shù)修改數(shù)據(jù)庫中的方劑信息,其核心代碼如下:
publicbooleanupdateFJ(Stringfjsr, Stringfjnm,Stringfjwm,Stringzccf,Stringnd,Stringxxsm,Stringfjfl,Stringfjmc,String jx,Stringbz){
psSQL="UPDATEFJXXSETFJSR="+"'"+fjsr+"'" +","FJNM="+"'"+fjnm+"'"+","FJWM="+"'"+ fjwm+"'"+","ZCCF="+"'"+zccf+"'"+","ND="+"'"+ nd+"'"+","XXSM="+"'"+xxsm+"'"+","FJFL="+"'"+ fjfl+"'"+","FJMC="+"'"+fjmc+"'"+","JX="+"'"+ jx+"'"+","BZ="+"'"+bz+"'"+",";try{stmt.executeUpdate(psSQL);conn.commit();returntrue;
}catch(SQLExceptione){
System.out.println(e.getMessage();
e.printStackTrace();
}
returnfalse;
}
4)通過getFJData()函數(shù)來查詢方劑信息,其核心代碼如下:
publicvoidgetFJData(){
psSQL="SELECT*FROMFJXX";
try{
prs=stmt.executeQuery(psSQL);
}catch(SQLExceptionse){
System.out.print(se.getMessage();
se.printStackTrace();
}
}
(5)通過deleteFJData()函數(shù)實現(xiàn)對已有方劑的刪除操作,其核心代碼如下:
pubicvoiddeleteFJData(Stringfjsr){
psSQL="DELETEFROMFJXXWHERE FJSR="+"'"+fjsr+"'"";
try{
prs=stmt.executeQuery(psSQL);
}catch(SQLExceptionse){
System.out.print(se.getMessage();
se.printStackTrace();
}
}
目前敦煌醫(yī)學在國內(nèi)外的研究受到越來越多的重視,由于歷史的原因敦煌醫(yī)學資源大都比較分散,難以集中,因此給后續(xù)的研究帶來很大的困擾。建立敦煌醫(yī)學方劑素材數(shù)據(jù)庫,通過收集并整理準確、全面的方劑資料,可有效地實現(xiàn)敦煌醫(yī)學方劑資源最大限度的集中,為后來的研究者提供充分的資源,同時避免重復收集等工作。本課題的研究仍有一些不足之處,如敦煌醫(yī)學方劑的收集來源大都是通過網(wǎng)絡(luò)、文獻等途徑,難免有不全之處,同時庫中建立的方劑數(shù)據(jù)的表結(jié)構(gòu)應(yīng)還進行進一步的優(yōu)化和改進。
[1] 王曌瀅,王玉珠.敦煌醫(yī)學抗衰老方劑研究概況[J].西部中醫(yī)藥,2013,26(4):11-12.
[2] 唐興源,任真.敦煌醫(yī)學素材數(shù)據(jù)庫系統(tǒng)的設(shè)計與實現(xiàn)[J].甘肅科技,2013,31(24):19-20.
[3] 魯艷霞,邵欣欣.數(shù)據(jù)庫原理與應(yīng)用實訓教程[M].北京:清華大學出版社,2013.
[4] 耿祥義,張躍平.Java面向?qū)ο蟪绦蛟O(shè)計[M].北京:清華大學出版社,2013.
RS
1.蘭州市科技局人才創(chuàng)新創(chuàng)業(yè)專項(項目編號:2014-2-33)。2.敦煌醫(yī)學與轉(zhuǎn)化省部共建教育部重點實驗室開放基金項目(項目編號:DHYX14-001)。
△任真(1979-),男,副教授,碩士,主要從事數(shù)據(jù)挖掘、中醫(yī)藥數(shù)字化推廣的相關(guān)研究。郵箱:rz@gszy.edu.cn。