GVKun编程网logo

PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释

16

本文将为您提供关于PowerDesigner15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释的详细介绍,同时,我们还将为您提供关于Hibe

本文将为您提供关于PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释的详细介绍,同时,我们还将为您提供关于Hibernate 逆向工程【PowerDesigner、idea 环境下】、Power Designer数据库建模工具,正向、逆向工程、Power designer逆向工程生成ER图、Powerdesign 逆向工程生成 Oracle11g 数据模型的实用信息。

本文目录一览:

PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释

PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释

 使用PowerDesigner默认配置逆向工程是没有注释(name列为英文,comment列是空的),这样的不方便查看字段具体是什么意义,将注释一同导出,方便查看字段具体的意义,如下图

 

 注释列导出步骤

1、新建脚本DBMS,选择菜单:Tools→Resources→DBMS

弹出List Of DBMS对话框,选择新建

弹出新建对话框,填写名称为“My Microsoft SQL Server 2008”(这个名称可以自己定义),选择“Microsoft SQL Server 2008”,点击OK

 

上图默认文件,不需要修改,直接点保存,弹出下图

 点击展开script->objects->column,选中SqlListQuery,如下图

 

将下面的脚本复制到右边的Value输入框中覆盖原来的脚本,点击确定

{OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, ExtIdentitySeedInc,COMMENT,COLNNAME, ExtCollation, ExtIdtNotForReplication, ExtDeftConstName, Sparse, FileStream, ExtRowGuidCol}

select
    u.name,
    o.name,
    c.column_id,
    c.name,
    case when c.system_type_id in (165, 167, 231) and c.max_length = -1 then t.name + ''(Max)'' else t.name end,
    c.precision,
    case (c.max_length) when -1 then 0 else case when c.system_type_id in (99, 231, 239) then (c.max_length/2) else (c.max_length) end end as colnA,
    c.scale,
    case(c.is_computed) when 1 then convert(varchar(8000), (select z.definition from [%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id and z.column_id = c.column_id)) else '''' end as colnB,
    case(c.is_nullable) when 1 then ''NULL'' else ''NOTNULL'' end,
    case(c.is_identity) when 1 then ''identity'' else '''' end,
    case when(c.user_type_id <> c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d where d.user_type_id = c.user_type_id) else '''' end as colnC,
    convert(varchar(8000), d.definition),
    case (c.is_identity) when 1 then convert(varchar, i.seed_value) + '', '' + convert(varchar, i.increment_value) else '''' end as colnD,
    convert(varchar(8000), e.value) as colnE,
    convert(varchar(8000), e.value) as colnF,
    c.collation_name,
    case (i.is_not_for_replication) when 1 then ''true'' else ''false'' end,
    d.name,
    case(c.is_sparse) when 1 then ''true'' else ''false'' end,
    case(c.is_filestream) when 1 then ''true'' else ''false'' end,
    case(c.is_rowguidcol) when 1 then ''true'' else ''false'' end
from
    [%CATALOG%.]sys.columns      c
    join [%CATALOG%.]sys.objects o on (o.object_id = c.object_id)
    join [%CATALOG%.]sys.schemas u on (u.schema_id = o.schema_id)
    join [%CATALOG%.]sys.types   t on (t.user_type_id = c.system_type_id)
    left outer join [%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id and i.column_id = c.column_id)
    left outer join [%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
    left outer join [%CATALOG%.]sys.extended_properties e on (e.class=u.schema_id and e.major_id=o.object_id and e.minor_id = c.column_id and e.name=N''MS_Description'')
where 
   o.type in (''U'', ''S'', ''V'')
[  and u.name = %.q:OWNER%]
[  and o.name=%.q:TABLE%]
order by 1, 2, 3
View Code

选择File→Reverse Engineer→Database 对数据库进行逆向工程,DBMS选择刚才新建的“My Microsoft SQL Server 2008”,点击确定

选择使用刚才新建的“My Microsoft SQL Server 2008”

选项按照下图选中的,点击确定

到此修改配置完成,下面开始生产逆向工程

按照下图步骤操作

 

 

点击确定

选择数据库点击OK

 

点击OK就可以生产注释的逆向工程

上面步骤数据库表的注释comment没有导出来,下面导出数据库表注释comment

选择菜单:工具→Execute Commands→Edit/Run Script,Run运行vbs脚本即可。

将下面的脚本复制到上图的输入框中,点击run,就可生成表的comment注释了

''把pd中那么name想自动添加到comment里面
''如果comment为空,则填入name;如果不为空,则保留不变,这样可以避免已有的注释丢失.
 
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 comment 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 trim(tab.comment)="" then ''如果有表的注释,则不改变它.如果没有表注释.则把name添加到注释里面. 
       tab.comment = tab.name 
    end if  
 Dim col '' running column  
 for each col in tab.columns 
  if trim(col.comment)="" then ''如果col的comment为空,则填入name,如果已有注释,则不添加;这样可以避免已有注释丢失.
   col.comment= col.name 
  end if 
 next  
  end if  
 next  
   
 Dim view ''running view  
 for each view in folder.Views  
  if not view.isShortcut and trim(view.comment)=""  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
View Code

点击run,导出的表注释效果如下

 

 

PowerDesigner 15的下载链接: https://pan.baidu.com/s/1ryohBB9RSvKbzxjjaCs69g 提取码: r54q 

 

Hibernate 逆向工程【PowerDesigner、idea 环境下】

Hibernate 逆向工程【PowerDesigner、idea 环境下】

为什么要使用逆向工程

由于我们每次编写 Hibernate 的时候都需要写实体,写映射文件。而且 Hibernate 的映射文件也容易出错。而逆向工程可以帮我们自动生成实体和映射文件,这样就非常方便了。

使用 PowerDesigner

在设计数据库表时,我们使用 PowerDesigner 来生成概念模型 \ 物理模型…

设计一个人员组织架构:有机构、部门、员工、领导、角色、权限。

  • 一个机构有多个部门
  • 一个部门有多个员工
  • 领导可以管理多个部门,同时领导他自己也是员工
  • 一个员工可以有多个角色
  • 一个角色可以分配给多个人
  • 人员角色分配后可以设置是否有效,分配时间等
  • 一个角色有多个权限

概念模型:

这里写图片描述

生成物理模型:

这里写图片描述

这里写图片描述

最后生成物理模型是这样子的:

这里写图片描述

生成 sql 语句

我们可以单个生成,一个一个复制

这里写图片描述

也可以把整个物理模型的 sql 语句一起生成:

这里写图片描述


    /*==============================================================*/
    /* DBMS name: MySQL 5.0 */
    /* Created on: 2017/6/5 20:22:52 */
    /*==============================================================*/


    drop table if exists person_role;

    drop table if exists t_company;

    drop table if exists t_dept;

    drop table if exists t_employee;

    drop table if exists t_person;

    drop table if exists t_privilege;

    drop table if exists t_role;

    drop table if exists t_role_privilege;

    /*==============================================================*/
    /* Table: person_role */
    /*==============================================================*/
    create table person_role ( person_id varchar(32) not null, role_id varchar(32) not null, state varchar(32), primary key (person_id, role_id) );

    /*==============================================================*/
    /* Table: t_company */
    /*==============================================================*/
    create table t_company ( company_id varchar(32) not null, name varchar(32), primary key (company_id) );

    /*==============================================================*/
    /* Table: t_dept */
    /*==============================================================*/
    create table t_dept ( dept_id varchar(32) not null, company_id varchar(32) not null, name varchar(32), primary key (dept_id) );

    /*==============================================================*/
    /* Table: t_employee */
    /*==============================================================*/
    create table t_employee ( person_id varchar(32) not null, dept_id varchar(32), name varchar(32), employee_id varchar(32), primary key (person_id) );

    /*==============================================================*/
    /* Table: t_person */
    /*==============================================================*/
    create table t_person ( person_id varchar(32) not null, dept_id varchar(32) not null, name varchar(32), primary key (person_id) );

    /*==============================================================*/
    /* Table: t_privilege */
    /*==============================================================*/
    create table t_privilege ( privilege_id varchar(32) not null, name varchar(32), primary key (privilege_id) );

    /*==============================================================*/
    /* Table: t_role */
    /*==============================================================*/
    create table t_role ( role_id varchar(32) not null, name varchar(32), primary key (role_id) );

    /*==============================================================*/
    /* Table: t_role_privilege */
    /*==============================================================*/
    create table t_role_privilege ( role_id varchar(32) not null, privilege_id varchar(32) not null, primary key (role_id, privilege_id) );

    alter table person_role add constraint FK_person_role foreign key (person_id) references t_person (person_id) on delete restrict on update restrict;

    alter table person_role add constraint FK_person_role2 foreign key (role_id) references t_role (role_id) on delete restrict on update restrict;

    alter table t_dept add constraint FK_companty_dept foreign key (company_id) references t_company (company_id) on delete restrict on update restrict;

    alter table t_employee add constraint FK_inherit foreign key (person_id) references t_person (person_id) on delete restrict on update restrict;

    alter table t_person add constraint FK_dept_person foreign key (dept_id) references t_dept (dept_id) on delete restrict on update restrict;

    alter table t_role_privilege add constraint FK_belong foreign key (role_id) references t_role (role_id) on delete restrict on update restrict;

    alter table t_role_privilege add constraint FK_own foreign key (privilege_id) references t_privilege (privilege_id) on delete restrict on update restrict;

在数据库生成八张表:

这里写图片描述


在 Idea 下使用 Hibernate 逆向工程

参考博文!

这里写图片描述

值得注意的是:Intellij idea 下生成出来的映射文件是没有对应的关联关系的。也就是说:一对多或多对多的关系,它是不会帮你自动生成的【好像是这样子的】。。。因此,需要我们自己添加 Set【如果需要】


Power Designer数据库建模工具,正向、逆向工程

Power Designer数据库建模工具,正向、逆向工程

使用PD(UML工具——Power Designer)设计数据库正向工程

现在我们来使用Power Designer这个工具设计数据库。首先打开Power Designer这个工具,点击【文件】菜单,在下拉框中选中【建立新模型】,如下:

在弹出的对话框中创建一个Model,可按下图创建

接着来创建一个数据库表t_user,可按下图来创建。

选中【General】选项卡,在Name输入框中输入要新建的表名。

接着再选中【Columns】选项卡,新建表中的列。

最后点击【确定】按钮,则新建的表为

上面新建完t_user表之后,使用Power Designer这个工具还可以将建表语句导出到一个文件中,怎么做呢?可参考下图:

点击【确定】按钮之后,可以在桌面上找到bos_bc.sql这样的一个文件,打开,即可看到t_user表的建表语句:

有了这样一个bos_bc.sql文件之后,怎样将其导入到数据库中并创建相应的表呢?有两种方式:

第一种,使用图形化界面工具来操作。 

第二种,使用命令行工具,在mysql中执行sql脚本

接下来,我就来告诉大家如何创建有外键关联关系的两张表,以员工和部门为例来讲解。 
上面我们新建了一张员工表——t_user,现在就要新建一张部门表——t_dept了,我们尽量设计得简单点,该表的设计可仿照上面的步骤,在此不过多赘述。新建完的t_dept表为:

现在就要建立t_user表和t_dept表之间的外键关联关系了,具体做法是在t_user表新创建一列——dept_id,该列引用t_dept表的主键id,具体操作如下: 

可发现这并不是我们所想要的,因为虽然建立了两表之间的外键关联关系,但是是t_user表的主键(id)引用了t_dept表的主键(id)。为了在两表之间建立正确的外键关联关系,就要双击连接线,在弹出的对话框中选择【Joins】选项卡,如下:

点击【确定】按钮,即可如我们所愿:

  而且建表语句为: 

反向工程

File —> Reverse Engineer –>Database

修改PDM 模块名称和 DBMS 类型,这里是Oracle 10gR2:

配置数据源:

 

Connection profile name: 生成连接文件名称

Directory:生成连接文件保存位置,我这里保存到桌面

Connection type:连接类型,可是使用Native(tnsnames.ora)或者JDBC。

确定之后进行reverse。具体需要的时间要根据数据库对象的多少来定

逆向工程之后的PDM 如下图

Power designer逆向工程生成ER图

Power designer逆向工程生成ER图

想起来Sybase 的Power designer, 反向工程生成ER图, 这样看的就清楚了.

记录一下:

1. In PowerDesigner, choose File | Reverse Engineer | Database....

{6OW$HF5~498CIN5W@9)WGL

The New Physical Data Model Dialog box, shown next, appears.

DBMS要选成SQLServer2008, 然后点"OK"

image

2.在出来的database reverse engineering窗口里, 点上"Using script files", 再点那个"新建"的图标, 会出来个选择文件的对话框,选择script file的位置,也可以选择配置的数据源逆向工程,下图就是用配置好的数据源

then press "OK".

image

3. 就生成了ER diagram.

配置数据源如下:

GLR5O47HWA~_JL3G$G@E$$A

image

点击X`LU24PHZKXH_D(SG5YU9WF

image

下去大家看都知道怎么配置了,如果闲这样麻烦,可以由数据库导出脚本,用脚本逆向工程。

Powerdesign 逆向工程生成 Oracle11g 数据模型

Powerdesign 逆向工程生成 Oracle11g 数据模型

1. 创建数据源

  控制面板 -> 管理工具 ->ODBC 数据源(位数取决于装的 Oracle 位数)

 

  添加 DSN(用户,系统均可)

  

 

  

  

  输入完信息后,点击右侧的 Test Connection:

  

  输入密码,点击 OK,弹出成功信息则说明数据源配置完成。

  

  点击确定关闭弹窗,记得点击右上侧的 OK 保存配置!!!

 

2、使用 Powerdesign 逆向工程生成数据模型

  修改 DBMS 使得导出的模型显示列的注释:

  

  选中 oracle11g,双击

  

  弹出框找到 sqllistquery

  

  将右侧的 value 改为以下代码:

{OWNER, TABLE, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, NOTNULL EX, COMPUTE, DEFAULT, COMMENT,COLNNAME, ExtNotNullConstraintName EX, ExtNotNullDeferOption EX, Encrypted EX, Algorithm EX, EncryptionWithSalt EX}

select
   c.owner,
   c.table_name,
   c.column_name,
   decode (c.data_type_owner, NULL, c.data_type, nvl((select t.owner || ''.'' from sys.all_types t where t.owner = c.data_type_owner and t.type_name = c.data_type), '''') || c.data_type) as colnA,
   decode(c.data_type_owner, NULL, decode(c.character_set_name, NULL, to_char(decode(c.data_type, ''RAW'', c.data_length, ''UROWID'', c.data_length, c.data_precision)), to_char(decode(c.char_used, ''C'', c.char_length, c.char_col_decl_length)) || decode(c.char_used || c.character_set_name, ''CCHAR_CS'', '' char'', '''')), NULL) as colnB,
   c.data_precision,
   decode(c.data_precision, NULL, NULL, c.data_scale),
   decode(c.nullable, ''N'', ''NOT NULL'', [%ISDBAUSER%?''%SqlGetNotNullConstName.''||c.owner||c.table_name||c.column_name||''nullable%'':'''']) as colnC,
   case when (c.virtual_column = ''YES'') then c.data_default end,
   case when (c.virtual_column = ''NO'') then c.data_default end,
   m.comments,   
   m.comments,
   [%ISDBAUSER%?''%SqlGetNotNullConstName.''||c.owner||c.table_name||c.column_name||''%'':''''],
   [%ISDBAUSER%?''%SqlGetNotNullConstName.''||c.owner||c.table_name||c.column_name||''state%'':''''],
   decode(k.encryption_alg, NULL, 0, 1),
   decode(k.encryption_alg, ''AES 128 bits key'',''AES128'',''AES 192 bits key'',''AES192'',''AES 256 bits key'',''AES256'',''3 Key Triple DES 168 bits key'',''3DES168'',''2 Key Double DES 112 bits key'', ''3DES112'',NULL) as colnD, 
   k.salt
from
   sys.all_tab_cols c 
      left join sys.all_encrypted_columns k on (c.owner = k.owner and c.table_name = k.table_name and c.column_name = k.column_name)
      left join sys.all_col_comments m on (m.table_name = c.table_name and m.column_name = c.column_name and m.owner = c.owner)
where c.hidden_column = ''NO''
[  and c.table_name = %.q:TABLE%]
[  and c.owner=%.q:SCHEMA%]
order by
   c.owner, c.table_name, c.column_id

 

  生成数据模型

  

  选中上述菜单,弹出框:

  

  

 

  输入密码,点击连接:

  

  

 

  稍等片刻即可生成模型

  

  调整显示的列信息:

  选择 Tools->Display Reference

  

 

  点击 Advanced 进行配置:

  

 

   

 

   依次点击 OK 保存

  最终结果

  

 

我们今天的关于PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释的分享就到这里,谢谢您的阅读,如果想了解更多关于Hibernate 逆向工程【PowerDesigner、idea 环境下】、Power Designer数据库建模工具,正向、逆向工程、Power designer逆向工程生成ER图、Powerdesign 逆向工程生成 Oracle11g 数据模型的相关信息,可以在本站进行搜索。

本文标签: