医疗信息化建设最主要的任务是规划、设计、开发以及部署医疗信息系统。如何开发设计性能良好的医疗信息系统,对于提高医院临床科室的工作效率和医疗信息化工作水平而言至关重要。
在本系列文章中,笔者将围绕“如何开发性能良好的医疗系统软件”这一主题,并结合自身工作经历,分别从软件系统架构设计、程序开发设计、数据库设计开发、项目管理、典型案例等几个方面分享和总结相关经验和教训。
医疗信息化建设最主要的任务是规划、设计、开发以及部署医疗信息系统。如何开发设计性能良好的医疗信息系统,对于提高医院临床科室的工作效率和医疗信息化工作水平而言至关重要。
在本系列文章中,笔者将围绕“如何开发性能良好的医疗系统软件”这一主题,并结合自身工作经历,分别从软件系统架构设计、程序开发设计、数据库设计开发、项目管理、典型案例等几个方面分享和总结相关经验和教训。
软件系统的主要功效是支撑企业机构开展业务,企业机构要正常高效地开展业务,势必会有很多既定的业务规则,例如在医疗机构内部,患者要先挂号才能门诊就诊,必须先缴费才能执行检查检验等医疗项目。业务规则为顺利而高效地开展业务提供了保障。
在本文中,主要针对数据库设计方面的业务规则展开阐述,例如:
理解业务规则
从数据库设计的角度来看,简单的业务规则可以看作是数据库设计约束。例如:患者信息记录,身份证号码信息不允许为空,我们可以在数据库设计上将相应字段设置为必填(不允许为null)。识别记录所有的业务规则,并将业务规则进行分类管理,可以便利于后续开发过程中来逐一实现这些业务规则。
对于业务规则,如何从技术上实现该业务规则,与很多业务本身的逻辑复杂程度和业务的后续变化有关,在实现业务规则时需要综合考虑。例如,假设医院只能接收指定区域的医保患者。以武汉市为例,只能接收硚口、江汉、江岸、汉阳、洪山几个市辖区的居民医保,即业务规则要求患者信息记录中市辖区字段必须是QK、JH、JA、HY、HS之一。
要实现这一业务规则,很容易想到数据库字段名check约束。例如可以设置这样的check约束:AREA=’QK’ OR AREA=’JH’ OR AREA=’JA’ OR AREA=’HY’ OR AREA=’HS’。但是这一业务需求可能随时发生变动,接收医保患者的市辖区可能随时发生变动。例如,如果新增其他市辖区:东西湖区,或者不再接收洪山区医保患者,都需要重新修改数据库约束条件。每发生一次业务变动,都需要重新修改数据库约束,这显然不是最优的解决方案。
另一种方案,可以设计一个表用于记录接收医保辖区名——mipsArea,让医保患者信息表中辖区字段外键引用该表主键,这样医保患者信息表中就只接收允许辖区的患者信息录入。当辖区信息新增或者减少时,只需要修改mipsArea表即可,并且在程序设计时可以提供相应的界面给医保工作人员使用,由医保工作人员来维护接收医保辖区信息即可,显然这一方案要好得多。
世界上唯一不变的就是变化。在收集业务规则时多去了解该规则的业务背景与历史变化历程,而不是一味拒绝规则的变化。尽可能发现所有的业务规则,并记录下来。对这些业务规则按变化的可能性和修改难度进行分类,精心设计那些将来可能变化且修改困难的规则。
像这样可能随时变动,并且会对整个业务产生很大影响的业务规则,可作为数据库设计的关键业务规则。如何确定关键业务规则,可以从两个方面来考虑:一是修改业务规则的难度;二是业务规则的变化性,将来业务规则是否会频繁变动。
业务规则实现方法
识别业务规则后,需要设计业务规则实现方案,要么是通过数据库设计,要么是通过程序代码层实现。在实现方式上,有这样一些方法可供参考:
1.若规则为检验一组有效值时,把该规则转化为外键约束。
先前举例中的医保患者市辖区就是一个很好的例子。创建mipsArea表,填入接收医保的市辖区名。然后把医保患者市辖区字段列设为外键,引用mipsArea表的主键。
2.若规则为参数可能变化的计算式时,把这些参数提取到一张表中。
例如:节假日、不同季节的工作时间、挂号时间,可以存储在一个数据库表中,按key value格式存储,系统在实际计算时,从数据库表中读取相应的时间数据信息。
3.若逻辑或计算规则很复杂时,则提取到程序代码中进行实现。
这里说的代码可以是应用程序端代码,还可以是数据库端存储过程。把规则放到代码中实现的意义在于业务规则与数据库表结构分离了,规则的变化不会影响到数据库表结构。通过结构化编程或面向对象编程来实现复杂的规则更易于维护。例如某个医生专家有不同的门诊号,普通、专家、特殊专家号,费用不一样,每天出诊的号别可能不同。周一为专家号,周二为普通号,周五为特殊专家号。可以设计一张号别表,记录不同号别相应的费用、出诊时间等信息,并通过存储过程来实现该业务规则。根据挂号时间的不同,读取号别表中的费用信息,计算挂号费。
三层应用是很常见的软件应用架构,对于复杂的业务逻辑一般会在中间层(即业务层)实现。一些基本的验证,如必填信息、数字有效区间等,需要在最上层用户界面以及最底层数据库端进行双重检验。数据库端的约束是阻隔脏数据进入系统的最后一道防线,而用户界面处的检验可以避免错误数据传输到系统后端才被拒绝。
对于数据库设计而言,业务规则将直接影响到数据模型。业务规则确定了每个字段的域(值的类型和范围),字段是否是必须的,以及该字段要满足的其他条件。理解业务规则,并识别那些需要特别处理的关键规则至关重要。
有些规则简单且基本不会发生变动,可以很容易用数据库特性来实现;其他的一些规则可能复杂或时常变化,我们可以把它们从数据库中进行逻辑的或物理的隔离(隔离到参数表、存储过程或业务层中),使它们易于修改。
吴坤,计算机专业硕士,华中科技大学同济医学院附属同济医院信息中心软件工程师。专业计算机程序员,医疗信息技术推广者,积极参与社会活动,热衷于以信息技术提高医疗行业服务质量和改善患者就医体验。
HIT专家网∣致力推进中国卫生信息化
想加入HIT专家网专业交流群吗?
请添加“HIT专家网”小助手微信好友
(请务必注明姓名、单位名称、职务、主管技术或产品领域等实名信息)
微信订阅号:HIT180com
微信服务号:chinaHIT
投稿:tan_xiao@hit180.com
商务合作:(010)82373062