PowerDesigner是非常强大的数据库设计软件,熟练使用PowerDesigner可以使数据库设计高效而简洁。PowerDesign具体操作在帮助文档(按F1)里面有详细描述,这儿只是列出了常用的操作。PowerDesigner16.5破解汉化包: https://download.csdn.net/download/z645817/11221804
1.如果想详细了解编写VBS脚本在PowerDesign里自定义的一些命令与操作,具体的可以参考 $PWD\PowerDesigner 9\VB Scripts 目录下的脚本示例。
运行VB脚本在 Tools->Execute Commands 里可以进行操作。操作说明在帮助文档里写的很清楚 F1,帮助文档的位置在 Customizing and Extending PowerDesigner > Scripting PowerDesigner > Running Scripts in PowerDesign.
配置统一生成规则
2、修改建表脚本生成规则。如果每个表格都有相同的字段,可以如下修改:
Database -> Edit Current DBMS 展开 Script -> Object -> Table -> Create 见右下的Value值,可以直接修改如下:
/* tablename: %TNAME% */ create table [%QUALIFIER%]%TABLE% ( %TABLDEFN% ts char(19) null default convert(char(19),getdate(),20), dr smallint null default 0 ) [%OPTIONS%]
其中的 ts、dr 两列会在生成SQL脚本的时候自动的插入每个表格中,其中的%TNAME% 变量是给每个表格的SQL添加一个该表的Name值注释。
3、修改字段生成规则。要给每个字段都添加一个注释的话,Database -> Edit Current DBMS 中展开 Script -> Object -> Column -> Add 的 Value修改为:
%20:COLUMN% [%COMPUTE%?AS (%COMPUTE%):%20:DATATYPE% [%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%] [[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/
其中的%COLNNAME%就是列的Name值(可以是中文)。
4、修改外键命名规则。选择Database —> Edit Current DBMS 选择Scripts -> Objects -> Reference -> ConstName
可以发现右侧的Value为:
FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%
该命名方法是:\'FK_\'+8位子表名+9位Reference名+8位父表名,可以根据这种模式自定义为:
FK_%.U7:CHILD%_RELATIONS_%.U8:PARENT%
可以使FK名称变为FK_TABLE_1_RELATIONS_PARENT_1 掌握这种方法后就可以按照自己的想法修改。
5、生成建库脚本SQL文件中的表头注释很讨厌,可以在 Databse -> Generate Database (Ctrl+G)窗口中,选择Format卡片,去掉Script conventions的 Title 钩选项即可。
6、添加外键:Model -> References新建一条外键后,双击进入外键属性,在“Joins”卡片中可以选择子表的外键字段。
7、在生成代码时不包含drop语句
在菜单Database->Generate Database,选择弹出的窗口中的Options标签页,去掉窗口右边里面的所有Drop选项即可。
8.在生成代码中字段默认值不需要带单引号\',如default \'to_char(sysdate,\'yyyymmdd\')\'要改成default to_char(sysdate,\'yyyymmdd\')
在菜单Database->Edit Current DBMS... ,选择General标签页,在窗口左边选择Script->Quote,然后把窗口右边的Value后面的单引号去掉。
9.去掉生成的建表脚本中对象的双引号
打开PD选择Tools-Model Options-Naming Convention,把右边Name和Code的标签的Charcter case选项设置成Uppercase或者Lowercase,只要不是Mixed Case就行。
10、创建一个表在修改字段的时候,修改name的内容,code也跟着变化,如何让code不随着name变化
Name和Code 的右侧都有一个按钮“=”,如果需要不同步的话,把这个按钮弹起来就可以了,同步直接点击"="。
修改方法:PowerDesign中的选项菜单里修改,在Tool -> General Options->Dialog->Operating modes->Name to Code mirroring,这里默认是让名称和代码同步,去勾选复选框。
11、mysql版本无法生成视图的问题
打开使用MySQL5.0的PDM之后,在菜单里选择Database->Edit Current DBMS..->确认DBMS使用的是MySQL5.0
打开左端树状结构Script->Objects->View -> Create,在右端的Value中写入
create VIEW [%R%?[ if not exists]] %VIEW% as %SQL%
选中Drop,在右端的Value中写入
drop table if exists %VIEW%
选中Enable,在右端的Value中选择Yes,确定保存。
注意,此修改只是修改了PowerDesigner程序的设置,只需要配置一次即可;但是它不对PDM文件做改动,没有修改过的PowerDesigner不能生成视图的SQL。
12、建立一个表后,为何检测出现Existence of index的警告
A table should contain at least one column, one index, one key, and one reference.
可以不检查 Existence of index 这项,这条警告不影响建表。警告意思是说没有给表建立索引,而一个表一般至少要有一列、一个索引、一个主键。
13、PDM生成建表脚本时,字段超过15字符就发生错误
解决办法是打开PDM后,会出现Database的菜单栏,进入Database -> Edit Current DBMS ->script->objects->column->maxlen,把value值调大(原为30),比如改成60。出现表或者其它对象的长度也有这种错误的话都可以选择对应的 objects照此种方法更改,或者使用下面的这种方法:
●生成建表脚本时会弹出Database generation提示框:把options - check model的小勾给去掉,就是不进行检查(不推荐)
14、如何防止一对一的关系生成两个引用(外键)
要定义关系的支配方向,占支配地位的实体(有D标志)变为父表。在cdm中双击一对一关系->Detail->Dominant role选择支配关系
15、修改mysql表的类型,如由默认的myisam改成innodb
修改单个表的就在表的属性窗口中,选择Physcial Options标签页,双击窗口右边的窗口左边的type=(ISAM),然后在窗口右边下部选择sql,再修改成type=(innodb)
如果修改数据库的类型为innodb类型,打开模型的属性窗口,选择MySQL标签页,在Database type后的编辑框中录入InnoDB即可。再选择菜单database->default physical option,然后在弹出的窗口中左边双击选择type=[ISAM],在窗口右边就出现type=[ISAM],用鼠标点中它,在窗口的下面type后选择innodb,最后点“Apply to...”按钮,选择所有的表即可。
16、从模型直接生成MSSQL数据库表的时候没有附带上注释
PowerDesigner这个工具可以支持任何一种关系型数据库的模型设计,因为在PowerDesigner中每一种数据库模型的特性定义都存储在一个xdb文件中,我们可以在[PowerDesigner_Install_Home]/Resource Files/DBMS下可以找到。当然我们也可以自己创建一个新的xdb,定义好我们想支持的数据库模型的特性。
下面简单地说明一下,使用的是PowerDesinger16企业版。Sybase有些简化版本(如SQL Moduler)就不能自定义xdb,请大家注意。
●从菜单TOOLS->RESOUCES->DBMS,进入自定义数据模型
●PowerDesigner弹出一个对话框,列表框中列出了当前PowerDesigner支持的数据库模型。选择创建一个新的。输入名字SQL SERVER 2010(EXTENDED),选择从现有的SQL SERVER 2010复制,这样SQL SERVER 2010(EXTENDED)就包含了原来SQL SERVER2010模型拥有的所有特征。
●接下来,我们就需要为SQL Server 2010(Extended)添加支持自动生成表和列注释代码的特性。PowerDesinger把定义的特性用树状结构组织了起来,本篇要做的工作就是定义Script代码特征。我们需要修改Script\Objects\Table\TableComment和Script\Objects\Column\ColumnComment中的脚本特征代码。
●SQL Server 2010在数据库中保存表和列注释是通过调用系统存储过程sp_addextendedproperty来做的。那么我们只需要,分别写上
表级的注释代码是:
EXECUTE sp_addextendedproperty N\'MS_Description\', N\'%COMMENT%\', N\'user\', N\'%OWNER%\', N\'table\', N\'%TABLE%\', NULL, NULL
列级的注释代码是:
EXECUTE sp_addextendedproperty N\'MS_Description\', N\'%COMMENT%\', N\'user\', N\'%OWNER%\', N\'table\', N\'%TABLE%\', N\'column\', N\'%COLUMN%\'
%COMMENT%之类的就是相当于替换变量,PowerDesigner在生成脚本的时候自动替换设计模型中替换变量的值。
●保存SQL Server 2010(Extended)成一个xdb文件。
●现在,可以创建一个新的Physical Data Model了,数据库模型选SQL Server 2010(Extended)。建立一个表,需要注意的是,一定要指定一个数据库使用者,一般用dbo。我们可以为表和列都添加上注释。
●生成建库脚本,菜单Databases->Generate Database。注意要选中comment选项。点击确定,就得到最终的建库脚本。打开看看,我们看到了PowerDesinger根据我们告诉它的规则生成了对应的代码
EXECUTE sp_addextendedproperty N\'MS_Description\', N\'雇员信息\', N\'user\', N\'dbo\', N\'table\', N\'Employee\', NULL, NULL go EXECUTE sp_addextendedproperty N\'MS_Description\', N\'主键ID,自动增加\', N\'user\', N\'dbo\', N\'table\', N\'Employee\', N\'column\', N\'EmployeeID\' go
●我们在SQL Server 2010中执行这个角本,然后通过Enterprise Manager可以看到这些注释。
17、把NAME 列在 scrip里显示出来
修改字段生成规则。要给每个字段都添加一个注释的话,同一窗口中展开 Script -> Object -> Column -> Add 的 Value修改为:
%20:COLUMN% [%COMPUTE%?AS (%COMPUTE%):%20:DATATYPE% [%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%] [[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/
其中的%COLNNAME%就是列的Name值(可以是中文)
18、Identity
PDM里查看表的属性,Columns选项卡,选中整列,查看列属性,点左上方的properties图标(有手形图案的那个),此时打开一个设置窗口,General选项卡里面进行设置,在列属性的General标签页里有个Identity复选框,勾上就行。
19、为sql生成注释,操作如下,用的是PowerDesigner16.5,在其中选择Tools -> Excute commands->Edit/Run Script打开的窗口中添加以下信息,执行run
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 \'把表明作为表注释,其实不用这么做 tab.comment = tab.name Dim col \' running column for each col in tab.columns \'把列name和comment合并为comment 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
20、更换数据库sql语句
选择Database->change current DBMS,在DBMS中选择对应的数据库,如MySQL,点击确定后,然后选择Database---》Generate Database选项,在弹出的窗口中选择生成sql文件的保存路径,点击确定,则可看到生成的sql语言完全是按照MySQL的标准。
21、新建概念模型(conceptual Data Model)
File-->New Model-->Conceptual Data Mode 或者点击工作区,右键-->New Model-->Conceptual Data Mode
22、打开模型时,会有方格线,去除方格线:Tools->Dispaly Preferences->Diagram 去勾选Show page delimiter。
23、生成带注释的sql,Database-->Generate DataBase... 进入弹出框。
在Options页签可以选择要生存脚本的内容(Generate name in enpty comment),可以选择是否创建数据库的脚本,选择要生成脚本的表,文件编码方式
在selection中选择你需要生成sql的模块,指定输出目录等。