PowerDesigner使用技巧

powerDesigner的使用:

功能1:

不同的数据库可以进行表的相互转换存储。

例如:将oracle中的表在mysql中进行创建。

功能2:

在数据库第三方的可视化界面中有查看表与表之间的关系以及表的结构信息。

powerDesigner进行数据库设计:

第一步:使用管理员身份运行。

第二步:创建数据库物理模型。

第三步:在工作空间中创建数据表并设计表。

第四步:创建表与表之间的连接关系。

第五步:将物理模型导出为sql脚本文件,最后在数据库中执行即可(有了pdm文件相当于有了数据库所有的表)。

powerDesigner的物理模型转换成mysql表结构:

第一步:将oracle数据库中现有的表转换成pdm文件

第二步:File--->Reverse Engineer--->Database

第三步:配置mysql数据库的数据源

第三步:使用配置好的mysql数据源导出sql语句

****powerDesigner起步

点击File右键>New Model:

image

点击物理数据模型,填写模型名、数据库版本:

image

点击ok,如果不小心选错了,也不要紧,可以在Database选项卡中重新编辑。

接下来将产生模型名称、表的工具栏:

image

工具栏可以建表:

image

填写表名称:

image

Columns编辑表

image

选中右键>属性

image

可以添加序列:

image

给序列命名:

image

给序列定义:

image

查看序列生成:

image

生成序列的sql语句显示如下:

image

可以点击表再添加个字段(项目经理Id):

image

可以看一下表结构:

image

再建一个项目经理表:

image

项目经理表字段:

image

现在有两个表了:

image

此时点击reference,可以建立两个表间,相同字段的主外键关系(带fk的都是从表):

image

此时双击箭头可以对reference进行编辑:

image

此时就可以保存了,可以ctrl+s,即可另存为pdm文件:

image

保存于桌面即可

image

接着可以根据模型来生成sql语句:

image

选择在桌面生成sql即可:

image

可以看到桌面上生成了sql文件:

image

打开crebas.sql

/*==============================================================*/
/* DBMS name:      ORACLE Version 10g */
/* Created on:     2020/4/6 4:00:38 */
/*==============================================================*/

-- Type package declaration
create or replace package PDTypes as TYPE ref_cursor IS REF CURSOR;
end; -- Integrity package declaration
create or replace package IntegrityPackage AS
 procedure InitNestLevel;
 function GetNestLevel return number;
 procedure NextNestLevel;
 procedure PreviousNestLevel;
 end IntegrityPackage; /

-- Integrity package definition
create or replace package body IntegrityPackage AS
 NestLevel number; -- Procedure to initialize the trigger nest level
 procedure InitNestLevel is begin
 NestLevel := 0;
 end; -- Function to return the trigger nest level
 function GetNestLevel return number is begin if NestLevel is null then
     NestLevel := 0;
 end if; return(NestLevel);
 end; -- Procedure to increase the trigger nest level
 procedure NextNestLevel is begin if NestLevel is null then
     NestLevel := 0;
 end if;
 NestLevel := NestLevel + 1;
 end; -- Procedure to decrease the trigger nest level
 procedure PreviousNestLevel is begin
 NestLevel := NestLevel - 1;
 end;

 end IntegrityPackage; / drop trigger "CompoundDeleteTrigger_coder"
/ drop trigger "CompoundUpdateTrigger_coder"
/ drop trigger "tib_coder"
/ drop trigger "CompoundInsertTrigger_coder"
/ alter table "coder" drop constraint FK_CODER_REFERENCE_PRO_MAN / drop table "coder" cascade constraints / drop table "pro_man" cascade constraints / drop sequence "Sequence_2"
/ drop sequence "Sequence_3"
/ drop sequence "coder_seq"
/ create sequence "Sequence_2"
/ create sequence "Sequence_3"
/ create sequence "coder_seq" increment by 1 start with 1 maxvalue 999 minvalue 1 cache 20
/

/*==============================================================*/
/* Table: "coder" */
/*==============================================================*/ create table "coder" ( "cId"                NUMBER(10)                      not null, "cname"              varchar2(20), "pmId"               number(10),
   constraint PK_CODER primary key ("cId")
) /

/*==============================================================*/
/* Table: "pro_man" */
/*==============================================================*/ create table "pro_man" ( "pmId"               number(10)                      not null, "pmName"             varchar2(20),
   constraint PK_PRO_MAN primary key ("pmId")
) / alter table "coder" add constraint FK_CODER_REFERENCE_PRO_MAN foreign key ("pmId")
      references "pro_man" ("pmId") / create trigger "CompoundDeleteTrigger_coder" before delete
on "coder" for each row
declare
    integrity_error  exception;
    errno            integer;
    errmsg char(200);
    dummy            integer;
    found            boolean;

begin -- Errors handling
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end; / create trigger "CompoundUpdateTrigger_coder" before update
of "cId", "pmId" on "coder" for each row
declare
    integrity_error  exception;
    errno            integer;
    errmsg char(200);
    dummy            integer;
    found            boolean;
    seq NUMBER;

begin
    seq := IntegrityPackage.GetNestLevel; -- Errors handling
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end; / create trigger "tib_coder" before insert
on "coder" for each row
declare
    integrity_error  exception;
    errno            integer;
    errmsg char(200);
    dummy            integer;
    found            boolean;

begin --  Column ""cId"" uses sequence coder_seq select coder_seq.NEXTVAL INTO :new."cId" from dual; -- Errors handling
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end; / create trigger "CompoundInsertTrigger_coder" before insert
on "coder" for each row
declare
    integrity_error  exception;
    errno            integer;
    errmsg char(200);
    dummy            integer;
    found            boolean;

begin --  Column ""cId"" uses sequence coder_seq select coder_seq.NEXTVAL INTO :new."cId" from dual; -- Errors handling
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end; 

接着就是反转的过程:

image

命名模型,然后选择要反转的数据库版本:

image

点击Using a data source,然后点击右侧数据库小图标:

image

接着点configure(配置数据源):

image

点击Add Data Source:

image

选择系统数据源:

image

接着选Oracle in OraDb10g_home1(其实这一步是自动检测你的数据库版本,所以只有一个10g)

image

点完成:

image

接着需要填:

image

如果忘记了,可以登一下数据库:

image

完善数据源和服务信息、用户id:

数据源名自己起、TNS Service Name会自动匹配出服务名选择即可(就是数据库名),scott是用户名。

image

接着点测试连接:

image

连接上了:

image

接着点击OK:

image

接着就可以看到添加上一个数据源:

image

确定后可以回去选择数据源、填用户和密码、然后点击连接:

image

再返回即可,可以发现数据源自动匹配:

image

点击确定后会自动弹出一个框:

image

这样就可以选择要进行反转的表:

image

这样很明显看出来:有主外键关系的都可以自动连接,没有主外键关系的都独立。

箭头指向的都是主表,有的表既是主表又是从表,有的表同时是多个主表的从表。

可以看见功能很强大了吧,但是这不是最妙之处,

最奇妙的地方是可以把oracle数据库导过来的表传给mysql数据库,

下面就来做这件事。

点击Database选项卡:

image

接下来点Configure:

image

创建新数据源:

image

接下来配置msyql数据源时会出现问题:找不到mysql驱动,

powerdesigner需要32位的驱动才能连接mysql数据库。

Mysql驱动ODBC

所以我下载了mysql驱动,下载地址:

<pre style="overflow: auto; margin-top: 0px; margin-bottom: 0px; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">https://dev.mysql.com/downloads/connector/odbc/</pre>

我下载的版本是:mysql32位5.2.7,没什么特别的就是随便选个版本,还是喜欢中间是偶数,但是必须是32位。

image

根据向导进行安装ODBC5.2驱动:

image

点接受:

image

下一步:

image

安装:

image

完成:

image

就是看一眼没什么用:

image

ODBC5.2已经安装好。

接下来去控制面板>搜索odbc>可以看到32位数据源:

image

点击32位添加数据源,需要将刚才安装好的数据源添加上去:

image

可以看到已经自动检测到这个驱动,选中安装即可:

image

只要自己的数据库用户密码都写对,就可以自动显示你的mysql数据库名称:

image

选择一个你常用的数据库名即可。

点击完成可以看到MYSQL的驱动已经生成:

image

接下来就可以回到powerdesigner里添加数据源,然后向mysql数据库导入数据。

下面就来做这件事。

以管理员身份运行:pdlegacyshell16.exe,

接着按照之前的流程再走一遍,

File--->Reverse Engineer--->Database:

image

点击确定:

image

点击图标:

image

点击configure:

image

可以看到已经显示MYSQL的ODBC驱动,需要点击小图标:

image

选择系数据源:

image

下一步,可以看到MySQL驱动,选择即可:

image

点完成:

image

和刚才一样,用户密码都填好之后据可以在下拉列表里选择数据库,如果没显示列表,

说明账号或密码填写错误:

image

点击测试后:

image

点击确定后,回到这里,我的MySQL数据库没设置密码:

image

点击连接即可,可以发现已经变成mysql的数据源:

image

接下来你可以把mysql的表导进来或者点击取消,

毕竟我的主要目产生mysql的sql文件。

点击Database>Change Current DBMS

DBMS选择MySQL5.0:

image

接着点确定即可:

显示:

image

点击确定,再次打开时,数据库已经变成Mysql数据库了:

image

现在就可以将模型转换成Mysql的sql文件:

Database>Generation>

image

点击确定后,就可以生成mysql文件:

image

再去桌面看一下:

image

mysql.sql

[
复制代码

](javascript:void(0); "复制代码")

/*==============================================================*/
/* DBMS name:      MySQL 5.0 */
/* Created on:     2020/4/6 19:40:07 */
/*==============================================================*/ drop table if exists SCOTT.DB_CITY;

drop table if exists SCOTT.DB_CLASS;

drop table if exists SCOTT.DB_COURSE;

drop table if exists SCOTT.DB_CX;

drop table if exists SCOTT.DB_SHENG;

drop table if exists SCOTT.DB_STUDENT;

drop table if exists SCOTT.DB_STUDENT_COURSE;

drop table if exists SCOTT.DB_SYSTEM;

drop table if exists SCOTT.DB_TREE;

drop table if exists SCOTT.DB_USER; /*==============================================================*/
/* User: SCOTT */
/*==============================================================*/ create user SCOTT; /*==============================================================*/
/* Table: DB_CITY */
/*==============================================================*/ create table SCOTT.DB_CITY
(
   CITYID               varchar(3) not null,
   CITYNAME             varchar(20),
   SHENGID              numeric(3,0),
   primary key (CITYID)
); /*==============================================================*/
/* Table: DB_CLASS */
/*==============================================================*/ create table SCOTT.DB_CLASS
(
   CLASSID              varchar(32) not null,
   CLASSNAME            varchar(20),
   primary key (CLASSID)
); /*==============================================================*/
/* Table: DB_COURSE */
/*==============================================================*/ create table SCOTT.DB_COURSE
(
   COURSEID             varchar(32) not null,
   COURSENAME           varchar(20),
   primary key (COURSEID)
); /*==============================================================*/
/* Table: DB_CX */
/*==============================================================*/ create table SCOTT.DB_CX
(
   CXID                 numeric(10,0) not null,
   CXNAME               varchar(20),
   CAINO                varchar(32),
   primary key (CXID)
); /*==============================================================*/
/* Table: DB_SHENG */
/*==============================================================*/ create table SCOTT.DB_SHENG
(
   SHENGID              numeric(3,0) not null,
   SHENGNAME            varchar(32),
   primary key (SHENGID)
); /*==============================================================*/
/* Table: DB_STUDENT */
/*==============================================================*/ create table SCOTT.DB_STUDENT
(
   STUNO                numeric(4,0) not null,
   STUNAME              varchar(20),
   BIRTHDAY             datetime,
   CLASSID              varchar(32),
   SHENGID              numeric(3,0),
   CITYID               varchar(3),
   primary key (STUNO)
); /*==============================================================*/
/* Table: DB_STUDENT_COURSE */
/*==============================================================*/ create table SCOTT.DB_STUDENT_COURSE
(
   STUNO                numeric(4,0) not null,
   COURSEID             varchar(32) not null,
   SCORE                numeric(3,0),
   primary key (STUNO, COURSEID)
); /*==============================================================*/
/* Table: DB_SYSTEM */
/*==============================================================*/ create table SCOTT.DB_SYSTEM
(
   SYSID                numeric(2,0) not null,
   SYSNAME              varchar(20),
   primary key (SYSID)
); /*==============================================================*/
/* Table: DB_TREE */
/*==============================================================*/ create table SCOTT.DB_TREE
(
   TREEID               varchar(32) not null,
   TREENAME             varchar(20),
   TREENUM              numeric(20,0),
   BIRTHDAY             datetime,
   primary key (TREEID)
); /*==============================================================*/
/* Table: DB_USER */
/*==============================================================*/ create table SCOTT.DB_USER
(
   USERID               varchar(20) not null,
   USERPASS             varchar(6),
   USERNAME             varchar(20),
   primary key (USERID)
);

alter table SCOTT.DB_CITY add constraint SYS_C005829 foreign key (SHENGID)
      references SCOTT.DB_SHENG (SHENGID) on update restrict;

alter table SCOTT.DB_STUDENT add constraint FK_STUDENT_CITY_CITYID foreign key (CITYID)
      references SCOTT.DB_CITY (CITYID) on update restrict;

alter table SCOTT.DB_STUDENT add constraint FK_STUDENT_CLASS_CLASSID foreign key (CLASSID)
      references SCOTT.DB_CLASS (CLASSID) on update restrict;

alter table SCOTT.DB_STUDENT add constraint FK_STUDENT_SHENG_SHENGID foreign key (SHENGID)
      references SCOTT.DB_SHENG (SHENGID) on update restrict;

alter table SCOTT.DB_STUDENT_COURSE add constraint FK_SC_COURSE foreign key (COURSEID)
      references SCOTT.DB_COURSE (COURSEID) on update restrict;

alter table SCOTT.DB_STUDENT_COURSE add constraint FK_SC_STUDENT foreign key (STUNO)
      references SCOTT.DB_STUDENT (STUNO) on update restrict;

这样就完成了oracle表转换成mysql表。

关键是mysql是否可以直接用这个sql呢?

试一下吧:

打开navicat:

image

打开数据库:

点击查询>粘贴>运行:

image

不过scott这个用户创建不了,索性把“create user scott”删掉,接着替换所有的"SCOTT."为“空”即可:

image

显示有错误,因为里面写着create user scott;:

<pre style="overflow: auto; margin-top: 0px; margin-bottom: 0px; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">create user SCOTT;
[Err] 1396 - Operation CREATE USER failed for 'SCOTT'@'%'</pre>

在删除带有scott的词之后,就可以执行。

刷新后就有表结构:

image

好了,以上是powerdesigner的基本功能,你也试试吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容