ERWin经验小结

上传人:cl****1 文档编号:477620490 上传时间:2022-11-15 格式:DOC 页数:22 大小:822KB
返回 下载 相关 举报
ERWin经验小结_第1页
第1页 / 共22页
ERWin经验小结_第2页
第2页 / 共22页
ERWin经验小结_第3页
第3页 / 共22页
ERWin经验小结_第4页
第4页 / 共22页
ERWin经验小结_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《ERWin经验小结》由会员分享,可在线阅读,更多相关《ERWin经验小结(22页珍藏版)》请在金锄头文库上搜索。

1、wordERWin经验小结1 版本本文所述内容均在ERWin Data Modeler 7.2.5中实验通过。2 根本使用2.1 常用快捷键快捷键用途Ctrl + +放大视图Ctrl + -缩小视图Ctrl + 切换到逻辑模型视图Ctrl + 切换到物理模型视图2.2 显示级别在ERWin中可以显示实体表不同级别的视图,逻辑模型相关选项:物理模型相关选项:实体表级显示,逻辑模型相关选项:实体表级显示,物理模型相关选项:2.3 重新排列对象3 使用Name mapping设计好逻辑模型后,利用Name mapping的设置,可以通过2个映射文件,在物理模型里自动命名表名和列名。一般情况下逻辑模型

2、中的实体表和属性列名都使用中文,以便于理解,而在物理模型里一般使用英文,以实现比拟优化的设计。3.1 映射文件X例表名映射文件X例:纳税人信息,FACT_nsrxxb列名映射文件X例:纳税人电子档案号,nnsrdzdah设立日期,dslrq行业,_HY行业名称,_CAPTION行业代码,_HYDM3.2 Name mapping设置依次打开菜单项:Tools-Names-ModelNaming Options选择Name Mapping选项卡设置以下项目:项目值Enity to Table%Lookup(B1,%EntityName)Attribute to Column%Decl(test,

3、_)%=(test,%Lookup(B1,%AttName)%If(%=(%Substr(%:test,1,1),_)%Substr(%:test,2)%else%:test其中黑体字为映射文件名,这2个文件需要与erwin文件保存在同一目录中。3.3 常见问题为什么在物理模型中不能通过映射文件自动修改表名?1. 可能映射文件修改后,并没有被ERWin重新载入,把ERWin关闭后,重新打开再试2. 物理模型的表名已经有值,所以没有通过映射文件自动修改表名,把表名清空后再试3. 打开.erwin文件后,提示映射文件找不到这种情况可能发生在直接双击.erwin文件时,在开始菜单中打开ERWin,然

4、后通过菜单打开.erwin文件即可解决。4 外键的使用在设计多维模型时,为维表和事实表建立外键关系,可以直观展示维表和事实表的关联关系。观察一个事实表和与它直接相关联的维表,如此可以看到一个清晰的星形模型。一般情况下维表与事实表的关系是:维表是主表,事实表是子表,维表中的一行数据对应事实表中的多行数据,维表与事实表使用维表的唯一关键字即主键关联。在ERWin中建立外键关联时,前提条件是在主表上创建了主键。以下例子中均以事实表作为子表,维表作为主表建立外键关系。4.1 一样列名建立外键关联建立外键关联最简单的情况是维表的主键列与事实表的维度列具有一样的名称。具体操作如下:1. 点击工具条中的,然

5、后再点击维表主表,最后点击事实表子表2. 此时将弹出如下提示框:直接点击“OK按钮3. 这时外键关系已经建好了,在事实表中与维表主键列同名的列上会加上“FK外键标识。4.2 不同列名建立外键关联在很多情况下,事实表的维度列列名往往与维表主键列列名不一样,这时的处理方法有所不同,在下例中,我们希望将事实表的“行业列与维表相关联。1. 点击工具条中的,然后再点击维表主表,最后点击事实表子表2. 此时外键关系已创建,但是事实表上新建了一个与维表主键列一样的列“行业代码作为外键,并没有提示选择事实表使用的关联字段3. 双击两表之间的连接线,在“Relationships提示框中,选择“Rolename

6、选项卡,在Rolename输入框中,输入期望的关联字段:行业,点击“OK按钮。4. 此时弹出提示框,直接点击“OK按钮。5. 自动增加的“行业代码列删除,外键移到“行业列上。注意:要在逻辑模型视图下做此操作,如果在物理模型做此操作,在逻辑模型中,事实表的维度列名将会被修改为维表的主键列名。4.3 同一维表关联事实表的多个字段有时候,事实表的多个维度列都需要与同一个维表关联,在下例中,事实表已经通过“行业代码列与维表关联,我们还希望再将事实表的“行业列与维表相关联。1. 点击工具条中的,然后再点击维表主表,最后点击事实表子表2. 此时新增加了一个外键关系,但实际上关联字段仍是“行业代码3. 在新

7、增加的外键关系上,把Rolename改为“行业,即可让新增的外键使用“行业列关联。在此步会有提示框,直接点击“OK即可。4.4 维表关联到事实表上非默认列当事实表中有与维表主键列名一样的列时,新建的外键关系默认会放在此列上。如果希望外键关系在其他列上,如此在建立外键的对话框中,需要选择另一个选项。如:希望事实表使用“行业列与维表关联。新建外键关系时,在弹出提示框中,选择第3项“Rolename migrating attribute,输入“行业,点击“OK按钮在紧接着的提示框中,直接点击“OK即可达到目标4.5 删除外键关系删除外键关系时,会自动删除事实表上的外键列,而往往此列并不希望被删除掉

8、。可以使用以下方法解决:1. 复制实体表2. 删除外键关联3. 将复制表中的列拖到原表中4. 删除复制表5 使用Subject Area当模型里的表比拟多,特别是事实表很多,又有很多维表,关联有关系很多时,在ERWin或其他建模工具里显示比拟混乱,不容易清晰地看到各主题和维表之间的关系。如如下图是农发行账户模型中的E-R图的局部:如如下图是农发行账户模型中的E-R图的整体:在我们常用的星型模型结构中,整个模型实际是由一个个相对独立的星形模型组成的,只是各个星形模型之间会共用许多维表,这样就形成了上图那样的蜘蛛网结构。实际上我们观察模型时,希望得到的效果是:关注哪个星形模型时,只需要显示出与此星

9、形相关的事实表和维表,其他无关的表不希望看到。实际上这种功能,在ERWin中是可以提供的。ERWin提供了Subject Area主题域功能,主题域相当于一个视图区域,在此视图区域里可以为各实体建立快捷方式,让指定的实体在此视图中显示,而实体上原先定义的各种属性在此视图中可以正常显示。所有的Subject Area单个Subject Area视图:利用此功能,我们可以把一个星形模型中涉与的一个事实表和多个维表放到Subject Area中,此时即可以清晰地看到各表之间的关系,又不至于太乱,同时在此Subject Area中对实体做的任何修改都会反映到实体本身。在ERWin里,所有对象会全部显示

10、在Main Subject Area中。在界面左侧树形菜单上,通过右键即可创建一个新的Subject Area,如“测试修改此Subject Area的属性: 在Members选项卡中,参加实体到Subject Area中,添加时只需要选择事实表,再通过“级联添加的方式,即可把一个事实表和所有与其直接关联的维表参加到Subject Area中。在级联的选项中注意选择:Ancestors:1,Descendants:0。注意:不要使用复制、粘贴的方式从Main Subject Area中向新建的Subject Area中复制对象,这种方式会复制出重复的对象,而不是创建快捷方式,这种方式也得不到我

11、们预期的原始对象与Subject Area中对象同步的效果。6 反向工程6.1 使用反向工程创建ERWin模型文件使用反向工程,可以从已有的数据库生成ERWin模型文件。6.2 将逻辑模型的名称显示为物理模型的ment如果在数据库中,表和列上都已经写了MENT,使用反向工程生成ERWin文件后,查看模型的时候,无论是物理模型还是逻辑模型都显示的是英文表名和列名,但实际上相应的MENT信息实际已经读入并写入到了模型中。在物理模型中,列的MENT值保存在列的ment属性上。在逻辑模型中,列的MENT值保存在列的Definition属性上。但是一般情况下为了便于理解,我们希望在逻辑模型中,表名和列名

12、都能显示为中文,即MENT。现在知道了ment在哪里,需要做的事,就是在逻辑模型里把Definition的值写到Name上。为达到此目的,可以利用ERWin API编写一段小程序来实现。以下是一段Python脚本此脚本在python2.6, pywin32-214调试通过:#!/usr/bin/python# -*- coding: cp936 -*- import win32.client #创建对象 scapi = win32.client.Dispatch(AllFusionERwin.SCAPI) # conn=win32.client.Dispatch(ADODB.Connectio

13、n)#建立与持久装置中模型的连接 #源文件filename = c:adbcdw-lx.erwin#目标文件newfilename = c:adbcdw-lx2.erwinscPUnit = scapi.PersistenceUnits.Add(filename,RDO=yes) #建立存取内存中模型数据的连接 scSession = scapi.Sessions.Add() scSession.Open(scPUnit,0,0) #事务控制 scTranId = scSession.BeginTransaction() #获取所有Entity模型对象 scMObjects = scSessi

14、on.ModelObjects.Collect(scSession.ModelObjects.Root,Entity,1) for scObj in scMObjects: #取Definition属性的值 try: scDefineName = scObj.Properties(Definition).Value except Exception,ex: scDefineName = try: same = scObj.Properties(Name).Value except Exception,ex: same = #对象名赋值 scObj.Properties(Physical Name).Value = same scObj.Properties(Name).Value = scDefineName #获取该Entity的所有Attribute对象 scAttrObjects = scSession.ModelObjects.Collect(scObj,Attribute,1) for scAttrObj in scAttrObjects: #取Definition属性的值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号