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