数据库模型在经过几轮修改之后,如果还只是靠肉眼看表名和字段,很难一下子说清楚到底哪里动了。在erwin里要做模型比对,以及想要把模型之间的差异报告给导出来,主要就是依靠Complete Compare这个功能。它既可以拿两个模型放在一起比较,也支持拿模型去和数据库或者脚本文件做比较,然后在差异窗口里面去逐项地查看和处理对象、属性、关系这些内容上的变化。
一、erwin怎么做模型比对
正式去做模型比对以前,一定要先把当前的模型给保存好。因为在Complete Compare的整个比对过程当中,打开着的模型很可能会跟着差异的处理被实时更新掉,所以在动手同步之前,手里头必须得有一份备份才行。
1、打开Complete Compare
先在erwin Data Modeler里面把源模型和目标模型都打开,然后去点一下【Actions】→【Complete Compare】这个菜单。等那个向导的界面跳出来以后,再去分别指定左边要比较的对象和右边要比较的对象。通常的做法,是把当前认定的标准版本放在其中一侧,把准备要拿去检查的那个版本放在另一侧,这样差异的来源判断起来会方便一些。
2、去选好要比对的具体对象
在向导里面,你要去设置一下这次到底要比对哪些范围的东西,比如实体、表、列、关系、索引、键、域、主题区域等等这些都是可以勾选的。erwin这一边支持你通过比对的条件去把对象和属性筛出来,而且你也可以把自己设好的这一套比对口径给另存成一个Option Set,等下次再想做同样口径的比较,直接把它拿出来复用就行了。
3、执行Compare
等所有条件都设置完了以后,去点一下【Compare】这个按钮。这个时候系统会打开一个叫作Resolve Differences的窗口,里面会把左边模型和右边模型有差异的地方全都列出来。无论是新多出来的对象、被删掉的东西、属性发生变化的地方,还是那些没能自动对齐的对象,都会分组显示。到了这一步,不要一上来就把所有的差异全盘接受,而是应该先去看一看表和字段这部分的变动,然后再去检查索引、关系还有约束这些地方。
4、把已知的差异处理掉
如果有些差异是项目里面本来就允许保留的,比如说两边模型命名规则不同导致的差异,你可以把它标记成Known Difference。erwin这边还支持把这些已知的差异单独存成一份Snapshot,等到下一次再去做比对的时候,只要把这份快照加载进来,就能省掉很多重复去确认同一种差异的功夫。
二、erwin模型差异结果怎么看
在看差异结果的时候,不能只去盯着差异的数量有多少。有的时候,一个字段的数据类型一改,可能比十个注释同时发生变化还更要紧;又或者一条外键关系被删掉了,也会直接对数据库的生成脚本造成影响。
1、先去看未对齐的对象
所谓未对齐的对象,就是指某个对象只在其中一侧的模型里面才存在,在另外一侧压根儿就找不到。比方说左边有一个Customer表,右边却没有,这个时候就要去判断一下,这个表到底是新加进来的,还是被整个删掉了,又或者是不是因为名字被改过,才导致两边的对象没能被自动匹配上。
2、再去看字段级别的变化
字段的名字、数据类型、长度、能不能为空、默认值是什么,还有注释信息这些东西,全部都要重点去查看。比如说,把字段的类型从varchar变成int,这种改动的影响程度,肯定比只是去修改一下字段的描述文字要大得多,所以在评审的时候,就应该把这两种性质的修改分开来标记和处理。
3、检查主外键和索引
主键、外键、唯一约束还有索引上发生的变动,都会影响到数据库后面的结构,也关系到查询语句跑起来的效率。如果在差异报告里面看到了关系被删除、多了新的索引,或者是键字段发生了改变的记录,就需要把这些单独拎出来再做一次确认。
4、谨慎处理同步的方向
Complete Compare这个功能,是允许你把某一边的差异同步到另外一边去的,反过来操作也支持。但是在去做同步之前,一定得先弄清楚到底哪一边才是基准,千万不要一个不小心,把已经更新好的新模型,用旧的模型给覆盖回去了。
三、erwin模型差异报告怎么导出
在把差异报告给正式导出来之前,最好先去把显示的范围给调整好。这份报告主要是拿来辅助评审的,所以不太建议大家把那些跟实际结构无关的显示属性,还有早就已经被确认过没什么影响的已知差异,全都一股脑儿地塞到报告里面去。
1、先把差异的范围筛一下
在Resolve Differences这个窗口里面,只把这次评审真正需要看的对象类型给保留下来,比如说表、字段、关系、索引这些东西。至于那些仅仅跟图形显示有关的差异,像是颜色变了、布局有调整这些,只要它不影响到数据库最终的设计,就完全可以提前把它给过滤出去。
2、去生成差异报告
在Resolve Differences窗口当中,找到一个像【Show Report】这样的图标,去点一下它,就会弹出来一个报告生成的对话框。erwin的帮助资料里面也写过,可以根据当前窗口中已经显示出来的这些差异,去创建一份Complete Compare的报告,专门拿来做模型变化的跟踪。
3、把报告保存或者打印出来
在Report Dialog里面先把报告预览一下,确认内容没有毛病了之后,再按照自己团队的需要,去决定是把它保存成本地文件、直接打印出来,还是导出成别的格式。给报告起文件名的时候,最好是能把模型的名称、用来当做基准的那一版、这次要对比的目标版本,还有做比对的日期,这些信息都给写进去,比如可以写成CustomerModel_v1_vs_v2这样的名字。
4、把这一次比对所用的口径也保留下来
当报告被顺利导出来之后,可别忘了还要把这一次用到的Option Set,还有那条用作基准的模型和目标模型,一起都保存好。要不然的话,等到以后再回过头来翻看这份报告,光知道有差异摆在那里,却完全没办法确认当初到底比较了哪些对象,比较的是哪些属性,那就会变得很被动了。
总结
在erwin里面去做模型比对,可以顺着【Actions】→【Complete Compare】这条路径来完成。比的时候先要把源模型和目标模型给挑好,然后再去设置好要比对的那一堆对象和属性的范围,最后到Resolve Differences窗口里面去一条一条地查看那些被列出来的差异。等到要往外导出报告的时候,一定得记得先拿掉那些不相干的差异,再用【Show Report】去生成一份正式的差异报告。把模型文件、这份报告,还有当初比对所用的口径一块儿存下来,这样到了后面再去做评审,或者是回过头来追溯版本的时候,脉络就会清楚很多。
