1主从结构的双时态数据模型的设计应用
2015-04-29黄雄波
摘 要:针对医院信息管理系统(HIS)中的时态信息处理需求,提出了一种具有主从结构的双时态数据模型,进一步,对该模型的时态实体完整性、时态参照完整性以及用户定义的时态完整性进行了分析和设计。实际应用表明,新模型不仅具有良好的数据完整性约束机制,而且还易于实现时态数据的分段储存。
关键词:主从结构;双时态数据模型;数据完整性
中图分类号:TP311.11 文献标识码:A 文章编号:2095-2163(2015)02-
Design Application of Master-Slave Structures Bi-temporal Data Model
HUANG Xiongbo
(Department of Electronic and Information Engineering, Foshan Professional Technical Collegee, Foshan Guangdong 528137, China)
Abstract: In view of the hospital?information management system?(HIS)?of temporal?information processing demand,?proposes a?bi-temporal?data model with?master-slave?structure,?on the basis of this,?the temporal?integrity?of the model is?the temporal entity?integrity,?referential integrity?and?temporal?user defined?analysis and design.?The actual application shows that,?the new model not only has?data integrity constraint?mechanism,?but also?easy to?realize sectional?storage?of temporal data.
Keywords: Master/Slave Structures; Bi-temporal Data Model; Data Integrity
0 引 言
自然界的各种事物总是伴随着时间的流逝而不停地在演变和进化,相应地,事物的数据属性也在不断地变化。一般地说,传统的关系数据库管理系统(RDBMS)是属于快照数据库,即只保存事物在某一时刻的状态,据此,为了更好地记载并处理事物在发展过程中的各个状态,时态数据库技术便应运而生[1-3]。由于当前尚没有形成商品化的时态数据库系统(TDBMS),各种领域的时态信息处理系统只能在RDBMS上进行构建,故诸如时态数据的冗余优化储存、时态索引及时态数据的完整性约束等一系列的问题均需要开发人员自行处理[4]。
在医院信息管理系统(HIS,Hospital information system)的电子病历中,其数据属性具有明显的时态特征,例如,患者的各种检查记录、诊断记录及治疗记录等属性均随着时间的推移而不断在变化[5]。针对电子病历时态信息的数据特征,设计实现了一种具有主从结构的双时态数据模型,在此基础上,就该模型的数据完整性作了深入的分析和设计。
1 相关基础知识
1.1 双时态数据模型
定义1 有效时间(Vail Time):是指事物在现实世界中保持在某一状态的那段时期。
有效时间通常可用时间区间来表示,其中,为有效时间的起始时间,而为有效时间的结束时间。在实际应用中,常用变量来表示有效时间的结束时间一直有效并保持到现在或延伸至将来。
定义2 事务时间(Transaction Time):是指某个数据库事实被记载至计算机系统中的整个时期,即对应着数据库本身的增加、删除及修改等操作的发生时间。
类似地,事务时间通常可用时间区间来表示,其中,为事务时间的起始时间,而为事务时间的结束时间。事务时间反映了事物在计算机系统中的变迁历史,由于该时间是从计算机的系统时钟处导出,因而具有应用上的不可操纵性。在事务时间中,常用变量来表示数据库的某一元组直至目前为止还没有发生变更(删除或修改)操作。
定义3 双时态数据库(Bi-temporal DataBase):是指同时支持有效时间和事务时间的数据库系统。
双时态数据库不仅保存了事物在现实世界中各个时期的状态,而且也保存了事物在计算机系统中的记载变更过程,因而才是真正意义上的时态数据库。
事实上,在保存事物的历史变化及其在计算机系统的记载变更过程中,双时态数据库花费了海量的储存代价,为了有效地减少数据的冗余储存,目前较为成熟的做法是将事物的常量属性和时态属性分开存储[6]。在电子病历中,可以把患者的姓名、性别、出生年月、血型等不随时间变化而变化的属性保存在常量关系中,而诸如诊断记录、主管医生等与时间有关的属性则保存在各个时态关系中,如图1所示。
图1 电子病历中患者信息的时态E-R模型
Fig.1 Temporal E-R?model?patient information?in electronic medical records
對图1的各个关系的属性定义如下(带#的属性为该关系的主键):
患者基本信息:{身份证号#,姓名,性别,血型,…};
诊断记录时态信息:{住院号#,疾病代码#,疾病开始时间,疾病痊愈时间,事务录入时间#,事务变更时间};
主管医生时态信息:{住院号#,医生工号#,有效开始时间,有效时间,事务录入时间#,事务变更时间};
……
1.2 双时态数据的完整性
数据库的完整性就是指通过一定的语义约束来确保各属性取值的正确性、一致性及相容性[7-8],以患者信息的常量关系为例,各个患者的身份证号必须是唯一的,且其血型只能是A型、B型、AB型及O型中的一种。相对常量属性而言,时态关系的完整性约束就显得尤为复杂,特别是在传统的RDBMS上进行时态信息处理时,其时态完整性的约束检查机制更多的是由开发人员自行构建。下面将结合电子病历的患者信息对时态实体完整性、时态参照完整性及用户定义的时态完整性进行分析和讨论。
(1)时态实体完整性
时态实体完整性就是指元组在键上的时态取值不可重复,且不能为空值。如表1的患者诊断记录双时态数据表中,其联合主键为住院号、疾病代码和事务录入时间,不难发现 ,由于#1和#2记录均在[2014/12/08, 2014/12/15]期间内对同一患者的同一病情进行了记载,因而这两条记录是不满足时态实体完整性约束要求的。但由于这两条记录在三个联合主键上的取值不完全相同且也不为空值,因而传统的RDBMS就无法对该种重复进行检查和约束。
表1 电子病历中患者诊断记录的双时态储存
Tab.1 Bi-temporal storage of patient?diagnosis?recorded?in the electronic medical record??
Rec-
No
住院号#
疾病
代码#
疾病
开始时间
疾病
痊愈时间
事务
录入时间#
事务
更改时间
#1
14120201
52031
2014/12/05
2014/12/18
2014/12/05
UC
#2
14120201
52031
2014/12/08
2014/12/15
2014/12/08
UC
#3
14101822
08528
2014/10/12
2014/11/16
014/10/12
UC
#4
14101822
34420
2014/10/22
2014/11/08
2014/10/22
UC
…
…
…
…
…
…
…
(2)时态参照完整性
时态参照完整性是指多个时态关系上的约束,包含外键上的约束及各個时态关系上时间区间的归属约束两种。
?设属性集是时态关系上的外键,属性集是时态关系上的外键,则外键上的约束要求为:上的元组在属性上的取值必须取空值或等于时态关系中某元组在上的值。
?设
分别是时态关系上关于同一外键的各元组有效时间的并集,而为该外键的实际有效时间区间,则各个时态关系上时间区间的归属约束要求为:。以 “14101822”住院号为例,若患者在[2014/10/12,2014/11/16]期间入院接受治疗,在表1中,由于[2014/10/12,2014/11/16]和 [2014/10/22,2014/11/08]} 均包含于( ) [2014/10/12,2014/11/16],故表1的#3、#4元组均满足时态参照完整性中时间区间的归属约束;而表2中,由于[2014/12/12,2014/12/17] [2014/10/12,2014/11/16],故表2的#1元组不满足时态参照完整性中时间区间的归属约束。
表2 电子病历中患者的主管医生的双时态储存示例
Tab.2 Bi-temporal storage of the doctor in charge?recorded?in the electronic medical record
Rec-
No
住院号#
医生
工号#
有效
开始时间
有效
结束时间
事务
录入时间#
事务
更改时间
#1
14101822
2001
2014/12/12
2014/12/17
2014/12/12
UC
…
…
…
…
…
…
…
?用户定义的时态完整性
用户定义的时态完整性是指用户针对某一实际应用需求自行添加一些特殊的约束以便使数据满足一定的时态语义要求。以多值时态数据为例,由于存在并发症的原因,因而表1应允许同一患者在相同的时间区间里记载2种或以上的疾病(如表1中的#3和#4记录所示);与表1不同,患者在同一时间区间里只能有1名主管医生,因而表2应约束为单值时态数据。可见,不同的时态关系有着不同的时态语义约束要求。
2 主从结构的双时态数据模型的设计与实现
2.1 主从结构的双时态数据模型的设计
从图1中可知,各个时态属性均以独立的时态关系进行存储,故在实施时态参照完整性约束时因涉及多表连接操作必然引发效率低下等问题,为此,设计了一种具有主从结构的双时态数据模型,该模型的结构说明如下:
其中,为常量关系,为对应的常量属性;为主结构的时态关系,为主键,每一个的时态元组其实际有效时间区间为;为从结构的时态关系,为外键,引用,和分别为时态属性的类型及其相应的取值,为各个从结构的时态元组的有效时间区间。此外,当有成立时,则其对应的也成立。
基于上述模型,对图1的电子病历重新设计,得到如表3和表4所示的主从时态数据表格:
表3 电子病历中患者医疗信息的主结构双时态数据表
Tab.3 The master?structure of?information in the electronic medical records?of the?patients with bi-temporal?data table
Rec
-No
住院号#
入院时间
出院时间
事务
录入时间#
事务
更改时间
#1
14101822
2014/10/12
Now
2014/10/12
2014/11/16
#2
14101822
2014/10/12
2014/11/16
2014/11/16
UC
…
…
…
…
…
…
表4 电子病历中患者医疗信息的从结构双时态数据表
Tab.4 The slave?structure of?information in the electronic medical records?of the?patients with bi-temporal?data table
Rec
-No
住院号#
时态
属性#
时态
取值#
有效
开始时间
有效
结束时间
事务
录入时间#
事务
更改时间
#1
14101822
诊断记录
08528
2014/10/12
Now
2014/10/12
2014/11/16
#2
14101822
诊断记录
08528
2014/10/12
2014/11/16
2014/11/16
UC
#3
14101822
主管醫生
2001
2014/10/12
Now
2014/10/12
2014/11/16
#4
14101822
主管医生
2001
2014/10/12
2014/11/16
2014/11/16
UC
#5
14101822
治疗记录
02332
2014/10/12
2014/10/19
2014/10/12
UC
…
…
…
…
…
…
…
…
在表3的主结构双时态数据表中,#1元组表明了住院号为“14101822”的患者自2014/10/12起开始入院接受治疗,系统于当天记载了该事件,由于此时尚不确定患者的具体出院时间,故出院时间取值为,同时,事务更改时间也置为。当患者于2014/11/16出院时,按照双时态数据库数据只增不删的规则,首先把#1元组的事务更改时间从原来的变更为2014/11/16(即从2014/11/16起,#1元组不再有效);同时,添加#2元组记载患者在[2014/10/12,2014/11/16]期间入院接受治疗的事实。
在表4的从结构双时态数据表中,诸如诊断记录、主管医生及治疗记录等所有时态属性均保存在同一数据表格中,从结构双时态数据表的数据操作与表3相同。
2.2 主从结构的双时态数据模型的完整性约束
在主从结构的双时态数据模型中,其数据完整性约束应在主结构和从结构的双时态数据表上进行。其中,主结构双时态数据表应进行实体及用户定义的时态完整性约束,而从结构双时态数据表则应进行实体、参照及用户定义共3种时态完整性约束。不失一般性,这里仅讨论从结构双时态数据表的完整性约束。
算法 从结构双时态数据表的完整性约束算法
输入:从结构双时态数据表,执行增删改操作后的待保存元组;
输出:若满足时态完整性约束的,则;否则;
begin
(1)时态实体完整性约束的检查
(1.1)select * from Slave_DA where ( (住院号=var1) and (时态属性=var2) and (时态取值=var3) )→DSAll;
//在中查找{住院号、时态属性、时态取值}与元组完全相同的数据,检索结果生成一数据集;其中动态参数分别为元组在{住院号、时态属性、时态取值}属性上的取值;
(1.2) 按照文献[9]对数据集DSALL的有效开始时间为Now变量的元组进行绑定,并根据事务更改时间选取与temp_record元组有关的数据→DS;
(1.3)for i:=1 to DS.recordcount do
//遍历比对检索结果
begin
if not((DS.有效开始时间>temp_record.有效结束时间) or (temp_record.有效开始时间>DS.有效结束时间)) then
begin
flag[0]:=False;
break;
//元组在有效时间区间内出现重复记载,时态实体完整性约束标志置,并提前退出遍历
end;
end;
(1.4)flag[0]:=True;
//通过时态实体完整性约束检查后,]置
(2)时态参照完整性约束的检查
(2.1)select * from Master_DA where 住院号=var1→DS;
(2.2)按照文献[9]对数据集DS 中的有效开始时间为Now变量的元组进行绑定;
(2.3)if not((temp_record.有效开始时间>= DS.有效开始时间) and (temp_record.有效结束时间<= DS.有效结束时间)) then flag[1]:=False
else flag[1]:=True;
//元组与主结构双时态数据表 进行参照完整性约束检查,并根据检查结果置时态参照完整性约束标志]为或为
(3)用户定义的时态完整性约束的检查
(3.1)根据temp_record元组的类型在用户定义的时态完整性约束库中选取对应的约束规则项→rule[i];
(3.2)for i:=1 to rulecount do
begin
if not(rule[i]_check(temp_record)) then
flag[i+1]:=False;
else flag[i+1]:=True;
end;
//判别是否满足用户自定义的时态完整性约束,并根据检查结果设置相应的完整性约束标志
(4)时态完整性约束的处理
(4.1)若所有的时态完整性约束标志flag[i]均为True,则save(temp_record);
(4.2)若出现任一时态完整性约束标志flag[i]不为True,则return(error_code);
end.
2.3 数据的分段存储
为了提高主从结构的双时态数据模型的工作效能,可以对时态数据进行分段存储[10]。如图2所示,那些仍在住院接受治疗的患者其相关时态数据储存在工作库中,而当患者出院后(此时该患者在表中的有效结束时间小于),便把工作库中有关该患者的相关所有时态数据迁移至历史库中。
图2 主从结构的双时态数据模型的分段储存模型
Fig.2 Segmented storage?model of double bi-temporal data model?of the?master-slave?structure
3 结束语
在没有可用的时态数据库系统的情况下,在相当长的一段时期里,开发人员只能根据不同时态应用需求在RDBMS上建立各种形式不一的时态数据模型。本文结合电子病历中患者的医疗信息,提出了一种具有主从结构的双时态数据模型,该模型不仅具有良好的数据完整性约束机制,而且还易于实现时态数据的分段储存。下一步的主要工作有,在此模型的基础上,设计具有可视化操作的用户自定义时态完整性约束系统,并把该模型推广至其它领域中去。
參考文献:
[1] 汤庸.时态数据库导论[M].北京:北京大学出版社,2004:1-121.
[2] 郝忠孝.时态数据库设计理论[M].北京:科学出版社,2009:1-175.
[3] 汤庸,汤娜,叶小平.时态信息处理技术研究综述[J].中山大学学报(自然科学版),2003, 42(4):4-8.
[4] 姜晓轶,周云轩·时态数据库研究进展[J]·计算机工程与应用,2005,41(24):27-30·
[5] 黄雄波.电子病历中时态数据库的分析与设计[D]. 华南理工大学自动化科学与工程学院,2007.
[6] 黄雄波·电子病历中重叠时态数据的分析与消除[J]·计算机技术与发展,2009,18(3):235-238·
[7] 王珊,萨师煊.数据库系统概论(第4版)[M].北京:高等教育出版社,2006:1-40.
[8] 沈钧毅. 数据库系统原理[M].西安: 西安交通大学出版社,2014:16-30.
[9] 叶小平,汤庸·时态变量“Now”语义及相应时态关系运算[J]·软件学报,2009,16(5):838-845·
[10] 唐常杰,于中华,游志胜等·时态数据的变粒度分段存储策略及其效益分析[J]·软件学报,1999,10(10):1085-1090·
1 基金项目:广东省科技计划工业攻关项目(2011B010200031);佛山职业技术学院校级重点科研项目(2011KY006)。
作者简介:黄雄波(1975-),男,广东南海人,硕士,副教授,主要研究方向:时间序列分析、数字图像处理。