在DTS开发记录(4)-- 映射列一文中,我们详细的讨论了参与映射的源列和目标列,在拥有了映射列的基本概念的基础上,我们可以讨论数据映射DataMapping了。
数据映射主要由一组映射项(MappingItem)组成,它包含了源数据大纲到目标数据大纲的详细的完整的映射关系。
首先要注意一点,数据映射与数据大纲绑定,但是并不与任何特定的数据库表绑定。这样,DataMapping可以运用在不同的数据库表上,只要对应的数据库表结构兼容DataMapping要求的数据大纲即可。
1.MappingItem 映射项
一个映射项与一个目标列是1:1对应的。如果一个目标列参与了映射,那么它就能并只能携带一个MappingItem。MappingItem包含了一个或多个源列如何映射到目标列。如果MappingItem中只包含一个源列,则称之为“简单映射”;如果MappingItem中包含了多个源列,则称之为“合并映射”。
下面是MappingItem接口的类图:
IMappingItem的Source属性是一个ISourceMappingColumn的集合,当集合中的元素个数大于1时标志为合并映射,当集合中元素个数等于1时标志为简单映射。
IMappingItem的Source中不仅可以包含普通的源列,还可以包含源子列,这点我们在DTS开发记录(4)-- 映射列一文中已经专门强调过。
我们注意到,IMappingItem还有一个Verify方法,该方法用于验证本映射项中的映射规则是否合法 。比如,IMappingItem的Source中包含多个源(子)列,但是对应的IDestMappingColumn所携带的合并表达式却为空,Verify将验证出该映射项不合法。不合法的映射项将无法参与数据传递任务。
2.DataMapping
数据映射除了包含一组映射项(MappingItem)之外,还包括一些其它重要元素,如源数据大纲和目标数据大纲、主键信息等。下图是DataMapping类图:
DataMapping携带了源数据大纲和目标数据大纲,数据引擎在启动的时候会分别使用这两个大纲来验证数据源和数据目标是否与大纲兼容,如果不兼容,则不能进行数据传递。
我们看到DataMapping也有一个Verify方法,该方法首先会依次调用每个MappingItem的Verify方法,如果都通过,会再继续根据导出的形式(全部导出、增量导出)作一些其它方面的验证,如主键验证、主键映射验证等。
非常重要的,DataMapping有一个SourceMappingColumnManager属性,SourceMappingColumnManager用于管理所有参与映射的源列、源子列。因为并非所有的源列都参与映射,而且参与映射的源列可能非常复杂,比如源列分裂、变形、子列参与变形映射等。这样,当我们重新加载DataMapping以进行编辑的时候,我们就可以从SourceMappingColumnManager获取每个源列的分裂、变形、映射等详细情况。
DataMapping是可序列化的,因为我们需要将其保存成文件,以便日后可以重新编辑并使用。DataMapping既然要可序列化,毫无疑问SourceMappingColumnManager也需要可序列化。所以,序列化后的DataMapping保存了关于一个完整映射的所有细节,这样反序列化就可以将DataMapping还原为原来的状态以进行编辑或控制数据传递的数据转换过程。
数据引擎基于连接对(根据连接对可以创建对应的导入数据管道和导出数据管道)和数据映射工作,到这里为止,我们已经介绍完了连接对和数据映射,接下来就可以进入数据传递系统最核心的部分--数据引擎。
在进行数据传递工作之前,我们也许非常需要一种检查工具来检查、分析数据源中的数据,看看哪些数据不满足转换条件、不满足的原因是什么。用户也许需要根据检查工具的分析结果来做一些与数据传递相关的重要决定。
所以,下一节的内容是“数据检查”,那将是非常“琐碎”的一节, 因为你需要考虑到任何一种细微的转换失败的可能,正所谓事无巨细!
转到:DTS开发记录(序)