PowerDesigner使用教程


powerDesigner的使用:

  功能1:

    不同的數據庫可以進行表的相互轉換存儲。

    例如:將oracle中的表在mysql中進行創建。

  功能2:

    在數據庫第三方的可視化界面中有查看表與表之間的關系以及表的結構信息。

powerDesigner進行數據庫設計:

    第一步:使用管理員身份運行。

       第二步:創建數據庫物理模型。

       第三步:在工作空間中創建數據表並設計表。

    第四步:創建表與表之間的連接關系。

    第五步:將物理模型導出為sql腳本文件,最后在數據庫中執行即可(有了pdm文件相當於有了數據庫所有的表)。

powerDesigner的物理模型轉換成mysql表結構:

    第一步:將oracle數據庫中現有的表轉換成pdm文件

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

    第三步:配置mysql數據庫的數據源

    第三步:使用配置好的mysql數據源導出sql語句

powerDesigner起步

點擊File右鍵>New Model:

點擊物理數據模型,填寫模型名、數據庫版本:

點擊ok,如果不小心選錯了,也不要緊,可以在Database選項卡中重新編輯。

接下來將產生模型名稱、表的工具欄:

工具欄可以建表:

填寫表名稱:

 Columns編輯表

選中右鍵>屬性

可以添加序列:

 給序列命名:

給序列定義:

 查看序列生成:

生成序列的sql語句顯示如下:

可以點擊表再添加個字段(項目經理Id):

可以看一下表結構:

再建一個項目經理表:

項目經理表字段:

現在有兩個表了:

此時點擊reference,可以建立兩個表間,相同字段的主外鍵關系(帶fk的都是從表):

此時雙擊箭頭可以對reference進行編輯:

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

保存於桌面即可

接着可以根據模型來生成sql語句:

選擇在桌面生成sql即可:

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

打開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;
/

接着就是反轉的過程:

命名模型,然后選擇要反轉的數據庫版本:

點擊Using a data source,然后點擊右側數據庫小圖標:

 接着點configure(配置數據源):

點擊Add Data Source:

選擇系統數據源:

接着選Oracle in OraDb10g_home1(其實這一步是自動檢測你的數據庫版本,所以只有一個10g)

點完成:

 接着需要填:

如果忘記了,可以登一下數據庫:

完善數據源和服務信息、用戶id:

數據源名自己起、TNS Service Name會自動匹配出服務名選擇即可(就是數據庫名),scott是用戶名。

接着點測試連接:

連接上了:

接着點擊OK:

接着就可以看到添加上一個數據源:

確定后可以回去選擇數據源、填用戶和密碼、然后點擊連接:

再返回即可,可以發現數據源自動匹配:

點擊確定后會自動彈出一個框:

這樣就可以選擇要進行反轉的表:

這樣很明顯看出來:有主外鍵關系的都可以自動連接,沒有主外鍵關系的都獨立。

箭頭指向的都是主表,有的表既是主表又是從表,有的表同時是多個主表的從表。

可以看見功能很強大了吧,但是這不是最妙之處,

最奇妙的地方是可以把oracle數據庫導過來的表傳給mysql數據庫,

下面就來做這件事。

點擊Database選項卡:

接下來點Configure:

創建新數據源:

接下來配置msyql數據源時會出現問題:找不到mysql驅動,

powerdesigner需要32位的驅動才能連接mysql數據庫。

Mysql驅動ODBC

所以我下載了mysql驅動,下載地址:

我下載的版本是:mysql32位5.2.7,沒什么特別的就是隨便選個版本,還是喜歡中間是偶數,但是必須是32位。

根據向導進行安裝ODBC5.2驅動:

 點接受:

 下一步:

 安裝:

完成:

 

就是看一眼沒什么用:

ODBC5.2已經安裝好。

接下來去控制面板>搜索odbc>可以看到32位數據源:

 點擊32位添加數據源,需要將剛才安裝好的數據源添加上去:

可以看到已經自動檢測到這個驅動,選中安裝即可:

只要自己的數據庫用戶密碼都寫對,就可以自動顯示你的mysql數據庫名稱:

選擇一個你常用的數據庫名即可。

點擊完成可以看到MYSQL的驅動已經生成:

接下來就可以回到powerdesigner里添加數據源,然后向mysql數據庫導入數據。

下面就來做這件事。

以管理員身份運行:pdlegacyshell16.exe,

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

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

點擊確定:

點擊圖標:

點擊configure:

可以看到已經顯示MYSQL的ODBC驅動,需要點擊小圖標:

選擇系數據源:

下一步,可以看到MySQL驅動,選擇即可:

點完成:

和剛才一樣,用戶密碼都填好之后據可以在下拉列表里選擇數據庫,如果沒顯示列表,

說明賬號或密碼填寫錯誤:

點擊測試后:

點擊確定后,回到這里,我的MySQL數據庫沒設置密碼:

點擊連接即可,可以發現已經變成mysql的數據源:

接下來你可以把mysql的表導進來或者點擊取消,

畢竟我的主要目產生mysql的sql文件。

點擊Database>Change Current DBMS

DBMS選擇MySQL5.0:

接着點確定即可:

顯示:

點擊確定,再次打開時,數據庫已經變成Mysql數據庫了:

現在就可以將模型轉換成Mysql的sql文件:

Database>Generation>

點擊確定后,就可以生成mysql文件:

再去桌面看一下:

mysql.sql

/*==============================================================*/
/* 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:

打開數據庫:

點擊查詢>粘貼>運行:

不過scott這個用戶創建不了,索性把“create user scott”刪掉,接着替換所有的"SCOTT."為“空”即可:

顯示有錯誤,因為里面寫着create user scott;:

create user SCOTT;
[Err] 1396 - Operation CREATE USER failed for 'SCOTT'@'%'

在刪除帶有scott的詞之后,就可以執行。

刷新后就有表結構:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM