根据前文的对比分析,异构数据库间的映射关系大致可以分为三类,一对一(1:1)的映射关系、一对多(1:n)的映射关系,以及无映射关系。映射关系类似于接口映射关系,同样这里也给出数据库操作的映射本体定义。
定义28 (数据库操作的映射本体DBOPs_Mapping_Onto)DBOPs_Mapping_Onto=(concepts,relations,condition,{Σ},axioms),其中:
(1)concepts表示的数据库操作中概念的集合,包括数据类型、函数、sql语句、存储过程等。
(2)relations表示的是concepts中的元素与Σ的关系的集合,包括三种基本的映射关系。
condition 为条件判断。
(4){Σ}是与concepts中的元素相映射的序列集合,集合中序列的个数至少为1,序列可以表示为Σ=(concepts,relations)
(5)axioms表示的是数据库操作映射本体中存在的公理集合。
一对一(1:1)的映射关系与无映射关系较为简单,二元函数mapping(x,y)可以用来表示x与y存在的1:1 映射关系,一元函数noMapping(x)则可以表示不存在与x相对应的映射。例如,SQL Server中的LEN函数与MySQL中的LENGTH函数之间的映射关系就可以表示为mapping(LEN,LENGTH) ;而SQL Server中的IDENTITY函数,由于在MySQL中找不到与之对应的函数,因此可以表示为no-Mapping(IDENTITY)。
一对多(1:n)的映射关系要分三种情况讨论,如图32 所示。
图32 一对多(1:n)映射关系的三种情况
(1)简单的1:n 映射关系
这种情况如图32 中(1)所示,SQL Server中的某一个数据类型dt/函数f/数据库操作sql/存储过程process,在MySQL中等价于一组数据类型{dt1...dtn}/函数{f1...fn}/数据库操作{sql1...sqln}/存储过程{process1...processn}。这种映射的形式化描述可以参考第四章中的定义22。
定义29 若某一数据库中的一个数据类型dt,或一个函数f,或一个数据库操作sql,或一个存储过程process,在另一个数据库中对应于一组数据类型{dt1...dtn},或一组函数{f1...fn},或一组数据库操作{sql1...sqln},或一组存储过程{process1...processn},记作集合Σ,那么它们之间的映射关系可以表示为:
(www.xing528.com)
(2)1:n 映射关系+IF...ELSE...THEN/SWITCH...CASE
如图32 中(2)所示,SQL Server中的某一个数据类型dt/函数f/数据库操作sql/存储过程process,在MySQL中,不同的情况下等价于不同的数据类型集合{dt1...dtn}/函数集合{f1...fn}/数据库操作集合{sql1...sqln}/存储过程集合{process1...processn},其中n 可以为1。
定义30 若某一数据库中的一个数据类型dt,或一个函数f,或一个数据库操作sql,或一个存储过程process,在另一个数据库中,不同的情况(condition)下等价于不同的数据类型集合{dt1...dtn}/函数集合{f1...fn}/数据库操作集合{sql1...sqln}/存储过程集合{process1...processn},n 可以为1,集合用Σ来表示,那么它们之间的映射关系可以表示为:
例如,SQL Server中的DATEADD函数,若其中number参数取值为正数,则映射为MySQL中的DATE_ADD函数;若number取值为负数,则映射为MySQL中的DATE_ SUB函数。这一映射关系可以表示为:
(3)1:n 映射关系+OPS
如图32 中(3)所示,SQL Server中的某一个数据类型dt/函数f/数据库操作sql/存储过程process,在MySQL中,等价于某个运算操作作用下的n 个数据类型dt1...dtn/函数f1...fn/数据库操作sql1...sqln/存储过程process1...processn。
例如,SQL Server中的DATADIFF函数,它可以用来计算两个日期之间的间隔天数,在早期的MySQL中,需要用两个TO_DAYS 函数相减才能得到两个日期之间的间隔天数。事实上,现在的MySQL中,也已经有了DATADIFF函数。这里仅以此为例讨论此情况下的形式化定义。
定义31 若某一数据库中的一个数据类型dt,或一个函数f,或一个数据库操作sql,或一个存储过程process,在另一个数据库中,等价于某个运算操作作用下的n 个数据类型dt1...dtn/函数f1...fn/数据库操作sql1...sqln/存储过程process1...processn,那么它们之间的映射关系可以表示为:
这样,SQL Server中的DATADIFF函数与MySQL中的TO_DAYS 函数之间的映射关系就可以表示为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。