Powerdesigner的逆向工程生成PDM及中文注释问题-程序员宅基地

技术标签: 脚本  Powerdesigner  Oracle  VB  数据结构  SQL  

使用Powerdesigner的逆向工程生成PDM 
来源: 51CMM.COM   作者: 徐异婕 
在数据建模过程中,我们建立概念数据模型,通过正向工程生成物理数据模型,生成数据库建库脚本,最后将物理数据模型生成关系数据库。系统数据库设计人员希望能够将数据库设计和关系数据库生成无缝地集成起来,如何保证物理数据模型与其对应数据库之间的双向同步成为数据建模非常关键的一点。 

Powerdesigner作为强大的Case工具,为我们提供了方便的逆向工程特性。可以将目前所有流行的后端数据库(包括Sybase、 DB2、Oracle等)的结构信息通过逆向工程加入到PowerDesigner的物理数据模型和概念数据模型中,包括表、索引、触发器、视图等。 

本文介绍的内容仅涉及PDM(物理数据模型)的逆向工程。 

PDM中的逆向工程是指从现有DBMS的用户数据库或现有数据库SQL脚本中生成PDM的过程。逆向工程有两种对象:1)通过ODBC数据源连接数据库 2) 现有数据库sql脚本。 

本文示例的系统环境如下: 

1、 数据库已创建完毕,访问用户和密码设置完成。数据库为Oracle9i。 

2、 ODBC数据源已由oracle 的Net Configuration Assistant 创建,本地网络命名服务“Database”。 

3、 sql脚本示例crebas.sql。 

4、 Powerdesigner9.5已安装完成。 一、 通过数据源连接数据库逆向工程生成PDM 
1、 配置用户数据库连接参数 

选择Database->configure connections,转到system dsn标签, 



点击Add按钮,选数据库类型Oracle,点击完成。显示如下:输入DataSource Name“PDMTest”;输入ServerName“Database”, 配置完成。 



点击“Test Connect”输入ServerName“Database”,用户名和密码,若连接成功,显示如下: 



以后每次连接,选择Database?connect,选择odbc数据源,输入ServerName“Database”,用户名和密码。若无提示,则说明连接成功。同时,可以通过Database?Connection Information 查看连接信息。 

2、 设置逆向工程选项,生成pdm 

创建一个PDM文件,选择与之匹配的数据库类型“oracle9i”。 

选择Database?Reverse Engineer Database,弹出Database Reverse Engineering对话框,选Using an ODBC data source选ODBC数据源“PDMTest” 



点击确定后,显示此数据库中所有表、视图、用户。根据需要选择后,转换成pdm。 



3、 查看数据 

对于生成好的PDM,选择一个表图形符号,点击右键,选择View Data,就可以访问表中的数据了。 

二、 通过SQL脚本逆向工程生成PDM 

1、 数据库SQL脚本文件crebas.sql。下为脚本实例: 
/*==============================================================*/ 
/* Database name: PhysicalDataModel_1 */ 
/* DBMS name: ORACLE Version 9i */ 
/* Created on: 2003-07-13 10:49:08 */ 
/*==============================================================*/ 
/*==============================================================*/ 
/* Table: "class" */ 
/*==============================================================*/ 
create table "class" ( 
"classID" NUMBER(2) not null, 
"className" VARCHAR2(24), 
constraint PK_CLASS primary key ("classID") 


/*==============================================================*/ 
/* Table: "student" */ 
/*==============================================================*/ 
create table "student" ( 
"studentID" NUMBER(10) not null, 
"studentName" VARCHAR2(4), 
"classID" NUMBER(2), 
constraint PK_STUDENT primary key ("studentID") 


alter table "student" 
add constraint FK_STUDENT_REFERENCE_CLASS foreign key ("classID") 
references "class" ("classID") 


2、 创建一个pdm,选择Database?Reverse Engineer Database,选择Using script files。 



3、 看到由脚本自动生成相关的PDM如下所示: 


下面是表名的中文及字段的name和comment的替换问题 

PowerDesigner中name和comment互換 
1 PowerDesigner中批量根据对象的name生成comment的脚本 

执行方法:Open PDM -- Tools -- Execute Commands -- Run Script 

Vb script代码 
Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 

Dim mdl 'the current model 

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If 

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.comment = tab.name 
Dim col 'running column 
for each col in tab.columns 
col.comment= col.name 
next 
end if 
next 

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.comment = view.name 
end if 
next 

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 

Dim mdl 'the current model 

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If 

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.comment = tab.name 
Dim col 'running column 
for each col in tab.columns 
col.comment= col.name 
next 
end if 
next 

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.comment = view.name 
end if 
next 

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 


2 PowerDesigner中逆向工程将数据库中comment脚本赋值到PDM的name 

执行方法:Open PDM -- Tools -- Execute Commands -- Run Script 


Vb script代码 
Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 

Dim mdl 'the current model 

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If 

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 

Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
if len(tab.comment) <> 0 then 
tab.name = tab.comment 
end if 
On Error Resume Next 
Dim col 'running column 
for each col in tab.columns 
if len(col.comment) <>0 then 
col.name =col.comment 
end if 
On Error Resume Next 
next 
end if 
next 
end sub 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kgd1120/article/details/83942621

智能推荐

Linux Mint 19.1建立热点方法_mintlinux开启热点-程序员宅基地

文章浏览阅读1.2k次。Linux Mint 19.1建立热点方法首先点击桌面右下角的网络按钮,选择网络设置。在右侧的Wi-Fi参数下,点击用作热点点击开启按钮这时可以看到热点已经建立好了,这都是Linux Mint事先已经为我们预置好了wifi热点一系列参数的结果。打开网络连接可以看到,wifi下多了一个名为Hotspot的网络用这种方法建立出来的热点有一个缺陷,就是wifi名只能是你建立系统时创建的计算机..._mintlinux开启热点

哈希表(hash)_适合于ascii码的hash-程序员宅基地

文章浏览阅读317次。C++ hash STL c++ hash_table 分析简介由索引到值的数据结构(data structure that maps keys to values)直接映射,需要很大的空间。空间的利用率不高,为了将某一元素映射到一个“大小可以接受之索引”,这样的函数为hash function(散列函数或者哈希函数)。通常的哈希函数为取模。哈希函数(hash function)h(ke_适合于ascii码的hash

Kali渗透Windows服务器-程序员宅基地

文章浏览阅读104次。这个实验主要让我们学习漏洞扫描技术基本原理,了解其在网络攻防中的作用,掌握使用Kali中的Metasploit对目标主机渗透,并根据报告做出相应的防护措施。本实验通过利用kali进行漏洞扫描,使用Metasploit对目标主机进行渗透测试,并根据报告做出相应的防护措施,共分为3个实验步骤,详情如下;1、 实战步骤一:生成setup.exe后门程序,即木马程序。(1) 打开kali终端,输入ifconfig, 得到本机ip为192.168.189.130。

2021.7.5日报:npapi的小bug、实现chromium的socks5代理_chromium socks5-程序员宅基地

文章浏览阅读960次。1,发现要实现npapi的话,必须实现--disable-gpu-compositing命令行的效果。不然不知道为啥,np插件的窗口挂的父窗口上会什么都显示不了2,chromium真是恶心,不知道为啥就是不实现socks5的用户名+密码功能。https://bugs.chromium.org/p/chromium/issues/detail?id=256785 我看有人8年前就提这个要求了,就是一直不给实现。没想通这小功能为啥不支持。这链接里的人,求爷爷告奶奶似得,谷歌就是不实现。真是恶心。3、_chromium socks5

JAVA计算机毕业设计校园约拍系统Mybatis+源码+数据库+lw文档+系统+调试部署-程序员宅基地

文章浏览阅读306次。JAVA计算机毕业设计校园约拍系统Mybatis+源码+数据库+lw文档+系统+调试部署。springboot基于springboot+vue的线上学习系统。springboot基于JSP的企业办公管理系统设计与实现。springboot基于vue的百乐儿童玩具公司管理系统。ssm基于Vue的潍坊学院宿舍管理系统的设计与实现。ssm基于web的家教信息服务平台的设计与实现。

面试官:啥是集群策略啊?-程序员宅基地

文章浏览阅读290次。之前有读者问了 Dubbo Cluster 集群的一些问题。那么本文聊一聊Dubbo 的 Cluster 集群和 Failover Cluster (失败自动切换)策略。如果没有特别说明..._sticky invoker

随便推点

8. 读写锁ReentrantReadWriteLock&StampLock详解-程序员宅基地

文章浏览阅读365次。读写锁ReadWriteLock,顾名思义是一把分为读和写两部分的锁,读锁允许多个线程同时获得,因为读操作本身是线程安全的。而写锁是互斥锁,不允许多个线程同时获得写锁。并且读和写操作也是互斥的。读写锁适合读多写少的业务场景。针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它内部,维护了一对相关的锁,一个用于只读操作,称为读锁;一个用于写入操作,称为写锁,描述如下:没有其他线程的写锁没有写请求或者有写请求,但调用线程和持有锁的线程是同一个。

大学计算机上机实验期末考试题,《大学计算机基础》上机实验报告-程序员宅基地

文章浏览阅读555次。《《大学计算机基础》上机实验报告》由会员分享,可在线阅读,更多相关《《大学计算机基础》上机实验报告(16页珍藏版)》请在人人文库网上搜索。1、精品文档大学计算机基础上机实验报告班级:姓名:学号:授课教师:日期:年月日.精品文档目录一、 Windows 操作系统基本操作. - 1 -二、 Word 文字处理基本操作 .- 4 -三、 Excel 电子表格基本操作 .- 6 -四、 PowerPoin..._问题:上机实践:请完成下面的实践任务,以截图的形式上传作业答案。自己造表填

Android 宫格布局在横屏和竖屏模式下实现自动居中_android 动态居中-程序员宅基地

文章浏览阅读109次。宫格布局是一种常见的布局方式,它将控件按照网格的形式排列,通常用于展示图标、菜单或其他类似的内容。本文将介绍如何在Android应用程序中实现宫格布局,并确保在横屏和竖屏模式下,布局能够自动居中显示。首先,我们需要创建一个新的Android项目,并在布局文件中定义宫格布局。通过以上代码和布局文件的组合,我们可以实现在横屏和竖屏模式下实现自动居中的宫格布局。方法中,我们通过获取每个按钮的布局参数,并根据方向设置不同的约束属性,从而实现横屏和竖屏下的自动居中效果。希望本文对你有所帮助!_android 动态居中

C++11新特性--std::enable_if和SFINAE_std::enable_if sfnae-程序员宅基地

文章浏览阅读527次。名词解释SFINAE    SFINAE是英文Substitution failure is not an error的缩写,意思是匹配失败不是错误。这句话什么意思呢?当调用模板函数时编译器会根据传入参数推导最合适的模板函数,在这个推导过程中如果某一个或者某几个模板函数推导出来是编译无法通过的,只要有一个可以正确推导出来,那么那几个推导得到的可能产生编译错误的模板函数并不会引发编译错误。这段话很绕,我们接下来用代码说明一下,一看便知。struct Test { typedef int foo;_std::enable_if sfnae

unity 简单实现三阶魔方游戏_unity 魔方-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏12次。简单的魔方游戏_unity 魔方

基于SpringBoot的餐饮业供应商管理系统--94116(免费领源码、附论文)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案-程序员宅基地

文章浏览阅读574次。本系统使用Java技术开发,SpringBoot框架,采用的数据库是Mysql。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

推荐文章

热门文章

相关标签