数据转换冲突及转换过程中大对象的处理2010-12-27 赛迪网 廉夕数据转换冲突及处理数据转换冲突:在数据转换过程中,要想实现严格的等价转换是比较困难的。必须要确定两种模型中所存在的各种语法和语义上的冲突,这些冲突可能包括:(1)命名冲突:源数据源的标识符可能是目的数据源中的保留字。(2)格式冲突:同一种数据类型可能有不同的表示方法和语义差异。(3)结构冲突:如果两种DBMS之间的数据定义模型不同,如为关系模型和层次模型,则需要重新定义实体属性和联系,以防止属性或联系信息的丢失。(4)类型冲突:不同数据库的同一种数据类型存在精度之间的差异。(5)其他冲突:不同数据库的大对象类型存在不同的约束,而且存在一些特殊类型。如SQL SERVER中一个表中有多于一个TEXT或IMAGE的字段时,出现错误。而ORACLE也不允许一个表中的BLOB和LONG类型多于一个。冲突处理方法:对于以上数据转换中的冲突,可进行相应的冲突处理。对于命名冲突,可以先检查数据源中的保留字,建立保留字集合,对于保留字中的命名冲突,根据需要重新命名。对于格式冲突,可以根据ODBC SQL类型从数据源的驱动程序中取出相对应的数据源的数据类型后,对一些特定的类型进行特殊的处理。对于字符型数据中含有“’”字符的情况,在数据转换过程中需通过转义符作特殊处理,否则会把它误当作字符串分隔符。对于不同数据库的同一数据类型的精度冲突,类型转换中将ODBC SQL类型和精度结合起来决定源数据类型和目标数据类型的映射关系。找出目的数据源中与源数据源类型的精度最匹配的数据类型作为缺省的映射关系。转换过程中的数据类型匹配,日期型数据最好先转换成字符型,然后根据不同的目标数据源分别作不同的处理。如ORACLE中使用TO_DATE函数,而FOXPRO中使用CTOD函数将日期格式的字符串转换成日期。对于SQL SERVER中的TEXT、IMAGE类型,在进行转换时需要做出选择,或者把TEXT镜像为VARchar2(4000),或者镜像为LONG 类型,但Long 类型一个表里只能有一个。对于ORACLE,TEXT类型可以映像为CLOB类型,而IMAGE可以镜像为BLOB。CLOB类型可以在一个ORACLE表里有多列。读取数据源的元数据数据源的元数据类型元数据种类 元数据信息 用途数据源连接信息 数据库名,驱动器, 用于连接源数据源和目的数据源服务器,DSN名,数据源描述,用户名等表信息 表名,表属主, 用于数据转换中创建表表模式,表类型列信息 列名,类型,宽度, 用于数据转换中表的创建以及列映射精度,标度,是否为空类型信息 类型名,最大列宽度, 用于数据转换中表的创建以及类型映射最大最小标度,前后缀字符,是否接受空,关键字列表键信息 主键名,主键列, 用于数据转换中表模式的转换外键名,外键列,外键关联列其它对象信息:索引信息,存储过程信息,权限信息等 用于数据转换中数据库对象的转换。