PowerDesign高級應用
編寫相關的VBS腳本在PowerDesign里自定義一些命令與操作等,具體的可以參考C:\Program Files\Sybase\PowerDesigner 9\VB Scripts目錄下的腳本示例。怎么運用這些腳本呢?
在Tools-》Execute Commands里可以進行操作。具體說明在幫助里寫的很清楚。幫助的位置在 PowerDesigner General Features Guide-> PART 2. Modeling Guide->CHAPTER 8. Managing Objects->Accessing objects using VBScript->VBScript uses in PowerDesigner
PowerDesign的使用主要是DBMS的配置
1、修改建表腳本生成規則。如果每個表格都有相同的字段,可以如下修改:
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值注釋。
2、修改字段生成規則。要給每個字段都添加一個注釋的話,同一窗口中展開 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值(可以是中文)
3、修改外鍵命名規則。選擇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_%.U7:PARENT%,
可以使FK名稱變為FK_TABLE_2_RELATIONS_TABLE_1
掌握這種方法后就可以按照自己的想法修改了
生成建庫腳本SQL文件中的表頭注釋很討厭,可以在 Databse -> Generate Database (Ctrl+G)窗口中,選擇Options卡片,去掉Usage的Title鈎選項即可。
4、添加外鍵
Model -> References新建一條外鍵后,雙擊進入外鍵屬性,在“Joins”卡片中可以選擇子表的外鍵字段
5、去掉生成的SQL腳本雙引號的問題:ORACLE 8I2::Script\Sql\Format\CaseSensitivityUsingQuote改成No,默認是Yes所以會有雙引號。
在修改name的時候,code的值將跟着變動,很不方便。修改方法:PowerDesign中的選項菜單里修改,在[Tool]-->[General Options]->[Dialog]->[Operating modes]->[Name to Code mirroring],這里默認是讓名稱和代碼同步,將前面的復選框去掉就行了。
1.在生成代碼時不包含drop語句
在菜單Database->Generate Database,選擇彈出的窗口中的Options標簽頁,去掉窗口右邊drop...選項即可。
2.在生成代碼中字段默認值不需要帶單引號',如default 'to_char(sysdate,'yyyymmdd')'要改成default to_char(sysdate,'yyyymmdd')
在菜單Database->Edit Current DBMS...,選擇general標簽頁,在窗口左邊選擇Script->Quote,然后把窗口右邊的Value后面的單引號去掉。
3.生成的建表腳本中如何把對象的雙引號去掉?
打開cdm的情況下,進入Tools-Model Options-Naming Convention,把Name和Code的標簽的Charcter case選項設置成Uppercase或者Lowercase,只要不是Mixed Case就行!
或者選擇Database->Edit current database->Script->Sql->Format,有一項CaseSensitivityUsingQuote,它的comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否適用雙引號來規定標識符的大小寫,可以看到右邊的values默認值為“YES”,改為“No”即可!
或者在打開pdm的情況下,進入Tools-Model Options-Naming Convention,把Name和Code的標簽的Charcter case選項設置成Uppercase就可以!
4.修改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...”按鈕,選擇所有的表即可。
5、創建一個表在修改字段的時候,修改name的內容,code也跟着變化,如何讓code不隨着name變化
Name和Code 的右側都有一個按鈕“=”,如果需要不同步的話,把這個按鈕彈起來就可以了。
Tools->General Options->Dialog->Name to Code Mirroring (去掉)
6、由CDM生成PDM時,自動生成的外鍵的重命名
PDM Generation Options->Detail->FK index names默認是%REFR%_FK,改為FK_%REFRCODE%,其中%REFRCODE%指的就是CDM中Relationship的code!另外自動生成的父字段的規則是PDM Generation Options->Detail->FK column name template中設置的,默認是%.3:PARENT%_%COLUMN%,可以改為Par%COLUMN%表示是父字段!
7、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。
8、建立一個表后,為何檢測出現Existence of index的警告
A table should contain at least one column, one index, one key, and one reference.
可以不檢查 Existence of index 這項,也就沒有這個警告錯誤了!
意思是說沒有給表建立索引,而一個表一般至少要有一個索引,這是一個警告,不用管也沒有關系!
9、由pdm生成建表腳本時,字段超過15字符就發生錯誤(oracle)
原因未知,解決辦法是打開PDM后,會出現Database的菜單欄,進入Database - Edit Current DBMS -script-objects-column-maxlen,把value值調大(原為30),比如改成60。出現表或者其它對象的長度也有這種錯誤的話都可以選擇對應的objects照此種方法更改,或者使用下面的這種方法:
- ●生成建表腳本時會彈出Database generation提示框:把options - check model的小勾給去掉,就是不進行檢查(不推薦)
- ●可以修改C:Program FilesSybasePowerDesigner Trial 11Resource FilesDBMSoracl9i2.xdb文件.修改好后,再cdm轉為pdm時,選擇“Copy the DBMS definition in model”把把這個資源文件拷貝到模型中。
10、如何防止一對一的關系生成兩個引用(外鍵)
要定義關系的支配方向,占支配地位的實體(有D標志)變為父表。
在cdm中雙擊一對一關系->Detail->Dominant role選擇支配關系
11、你是否為從模型直接生成MSSQL數據庫表的時候沒有附帶上注釋而煩惱呢?
PowerDesigner這個工具可以支持任何一種關系型數據庫的模型設計,因為,在PowerDesigner中每一種數據庫模型的特性定義都存儲在一個xdb文件中,我們可以在[PowerDesigner_Install_Home]/Resource Files/DBMS下可以找到。當然,我們也可以自己創建一個新的xdb,定義好我們想支持的數據庫模型的特性。明白了這一點,這個問題的答案就顯而易見。
下面我就簡單地說明一下,我使用的是PowerDesinger11企業版。Sybase有些簡化版本(如SQL Moduler)就不能自定義xdb,請大家注意。
- ●從菜單TOOLS->RESOUCES->DBMS,進入自定義數據模型
- ●PowerDesigner彈出一個對話框,列表框中列出了當前PowerDesigner支持的數據庫模型。我們選擇創建一個新的。輸入名字SQL SERVER 2000(EXTENDED),選擇從現有的SQL SERVER 2000復制,這樣SQL SERVER 2000(EXTENDED)就包含了原來SQL SERVER2000模型擁有的所有特征。
- ●接下來,我們就需要為SQL Server 2000(Extended)添加支持自動生成表和列注釋代碼的特性。PowerDesinger把定義的特性用樹狀結構組織了起來,本篇要做的工作就是定義Script代碼特征。我們需要修改Script\Objects\Table\TableComment和Script\Objects\Column\ColumnComment中的腳本特征代碼。
- ●SQL Server 2000在數據庫中保存表和列注釋是通過調用系統存儲過程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 2000(Extended)成一個xdb文件。
- ●現在,我們可以創建一個新的Physical Data Model了,數據庫模型選SQL Server 2000(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 2000中執行這個角本,然后通過Enterprise Manager可以看到這些注釋。
12、把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值(可以是中文)
13、自增長列的設置
PDM里查看表的屬性,Columns選項卡,選中整列,查看列屬性,點左上方的properties圖標(有手形圖案的那個),此時打開一個設置窗口,General選項卡里面進行設置.
在列屬性的General標簽頁里有個Identity復選框,勾上就行了