唐兴源,任 真,湛 薇
(甘肃中医药大学,甘肃 兰州73000)
敦煌医学素材数据库中方剂入库的设计与实现*
唐兴源,任真△,湛薇
(甘肃中医药大学,甘肃 兰州73000)
从敦煌医学方剂素材本身的特点入手进行分析,结合敦煌医学应用的实际需求展开功能设计和数据库设计,对搜集到的方剂素材进行分析、分类并建立表结构,最后通过编程实现敦煌医学方剂信息的入库功能。
敦煌医学;方剂入库;数据库
1.1系统分析
敦煌遗书共约5万卷,其中医学卷子约100种,设计卷号达28个左右。据统计,这些医学卷子载有至少约1100余首中医方剂,主要包括内、外、妇、儿、五官、口腔、皮肤等临床各科方剂,以及食疗方剂与特色鲜明的佛教道教方剂等[1]。为使研究人员根据个人需要、意愿对敦煌医学方剂进行查询与使用,对敦煌医学中比较繁杂的、常用的中医方剂进行搜集、分类和处理[2],并将其以计算机可识别的方式存储在关系型数据库中,实现敦煌医学方剂的数字化存储,从而为研究人员带来更大的便捷。
1.2功能设计
将数据库技术应用到敦煌医学方剂的管理与存储上,有效地实现了其数字化。对敦煌医学方剂的入库检索功能做以下功能设计:
1)多样化的检索方式:①研究人员(用户)可以通过输入方剂的拼音首字母检索;②可以输入方剂类别检索,例如:常见的方剂分类有内、外、妇、儿科等;③输入方剂的部分名称,系统自动模糊匹配调出相关方剂信息;④当不知道自己要找哪些方剂时,直接回车键,将显示库中所有的方剂。注:由于库中方剂很多,此过程不常用,比较耗费查询时间;⑤选择年代,即可检索出出相应年代的方剂。
2)友好的检索界面。数据库检索界面友好,操作简单易懂,只需要按照操作提示即可完成检索,不需要系统的培训,节约了学习操作的时间成本。
3)详细的检索内容。在数据库设计阶段合理规划方剂在表中的存储结构,检索出来的方剂不仅包括其本身的组成成分,而且还会有具体的适用症状和注意事项等内容。
1.3数据库设计
1.3.1概念结构设计
将搜集、加工、整理好的敦煌医学方剂素材进行详细的分析、分类,提取其共性,并根据关系型数据库设计规范要求,建立表结构、表间关系、索引、约束等,实现方剂素材在库中存储结构的设计[3]。经过分析,涉及到的主要实体包括方剂信息、分类外码信息等。
1)方剂信息实体包括方剂名称、方剂分类、方剂内码、方剂输入码、剂型、年代、详细说明、组成成分、方剂外码、备注等属性。
2)分类外码信息实体包括分类代码、分类名称、备注等属性。
方剂信息和分类外码信息实体的E-R图如图1所示:
图1 方剂信息和分类外码信息实体的E-R图
1.3.2逻辑结构设计
数据库逻辑结构设计见表1,表2。
表1 方剂信息结构表
表2 分类外码信息结构表
在详细设计完成后,就需要编码实现敦煌医学方剂素材的入库功能,具体涉及到界面的布局、与后台数据库的交互两个方面。与后台数据库的交互有方剂信息的增、删、改、查操作,主要用到结构化查询语言(SQL)来完成。每次与后台的交互都会有一个当前时间的记录,例如:增加一种新方剂,会产生该方剂的入库时间;修改库中已有的方剂信息,会记录修改时间等。界面布局有好多选择的语言,可以用面向对象程序设计语言Java[4]、C#、.net等。这里详细给出实现敦煌医学方剂素材入库的关键核心代码:
1)通过getNowTime()函数获取当前服务器时间记录相关操作,其核心代码如下:
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()函数增加新的方剂信息,实现数据库操作中的“增”操作,其核心代码如下:
publicbooleanInsertFJ(Stringfjsr,String fjnm,Stringfjwm,Stringzccf,Stringnd,
Stringxxsm, Stringfjfl, Stringfjmc, String jx,Stringbz){
psSQL="INSERTINTOFJXX(FJSR,FJNM,FJWM,ZCCF,ND,XXSM,FJFL,FJMC,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()函数修改数据库中的方剂信息,其核心代码如下:
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()函数来查询方剂信息,其核心代码如下:
publicvoidgetFJData(){
psSQL="SELECT*FROMFJXX";
try{
prs=stmt.executeQuery(psSQL);
}catch(SQLExceptionse){
System.out.print(se.getMessage();
se.printStackTrace();
}
}
(5)通过deleteFJData()函数实现对已有方剂的删除操作,其核心代码如下:
pubicvoiddeleteFJData(Stringfjsr){
psSQL="DELETEFROMFJXXWHERE FJSR="+"'"+fjsr+"'"";
try{
prs=stmt.executeQuery(psSQL);
}catch(SQLExceptionse){
System.out.print(se.getMessage();
se.printStackTrace();
}
}
目前敦煌医学在国内外的研究受到越来越多的重视,由于历史的原因敦煌医学资源大都比较分散,难以集中,因此给后续的研究带来很大的困扰。建立敦煌医学方剂素材数据库,通过收集并整理准确、全面的方剂资料,可有效地实现敦煌医学方剂资源最大限度的集中,为后来的研究者提供充分的资源,同时避免重复收集等工作。本课题的研究仍有一些不足之处,如敦煌医学方剂的收集来源大都是通过网络、文献等途径,难免有不全之处,同时库中建立的方剂数据的表结构应还进行进一步的优化和改进。
[1] 王曌滢,王玉珠.敦煌医学抗衰老方剂研究概况[J].西部中医药,2013,26(4):11-12.
[2] 唐兴源,任真.敦煌医学素材数据库系统的设计与实现[J].甘肃科技,2013,31(24):19-20.
[3] 鲁艳霞,邵欣欣.数据库原理与应用实训教程[M].北京:清华大学出版社,2013.
[4] 耿祥义,张跃平.Java面向对象程序设计[M].北京:清华大学出版社,2013.
RS
1.兰州市科技局人才创新创业专项(项目编号:2014-2-33)。2.敦煌医学与转化省部共建教育部重点实验室开放基金项目(项目编号:DHYX14-001)。
△任真(1979-),男,副教授,硕士,主要从事数据挖掘、中医药数字化推广的相关研究。邮箱:rz@gszy.edu.cn。