美文网首页
PowerDesigner使用技巧

PowerDesigner使用技巧

作者: coderTG | 来源:发表于2021-11-22 09:23 被阅读0次

    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的基本功能,你也试试吧

    相关文章

      网友评论

          本文标题:PowerDesigner使用技巧

          本文链接:https://www.haomeiwen.com/subject/qxgvtrtx.html