Powerdesigner自定義DBMS
Powerdesigner以下簡稱PD.
PD默認支持的DBMS不夠用時,我們就需要自己定義了。
以apache derby數據庫為例。
1、DBMS的定義文件
PD的DBMS定義文件放在install_dir/Resource Files/DBMS目錄下。自定義DBMS的第一步是復制一個現成的DBMS文件,由於derby與Oracle相似之處比較多,所以可以選擇復制Oracle的DBMS文件,並重命名為derby.xdb
2、修改描述
用記錄本打開derby.xdb,將大概前16行的一些內容做修改。比如code、name等等。我的大體如下:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="UTF-8"?>
<?PowerDesigner AppLocale="UTF16" Code="DERBY" Family="DERBY" ID="{04DFD581-D1C0-43E8-B9AE-01951ECAB446}" LastModificationDate="1347972332" Name="Apache Derby" Objects="778" Symbols="0" Type="{4BA9F647-DAB1-11D1-9944-006097355D9B}" signature="XDB_XML" version="15.1.0.2850"?> <!-- do not edit this file --> <DBMS xmlns:a="attribute" xmlns:c="collection" xmlns:o="object"> <o:DBMS Id="o1"> <a:ObjectID>04DFD581-D1C0-43E8-B9AE-01951ECAB446 </a:ObjectID> <a:Name>Apache Derby </a:Name> <a:Code>DERBY </a:Code> <a:CreationDate>0 </a:CreationDate> <a:Creator/> <a:ModificationDate>1243501756 </a:ModificationDate> <a:Modifier>test </a:Modifier> <a:Comment> </a:Comment> <a:Family>DERBY </a:Family> |
這樣修改之后,我們在PD的database菜單里,選擇Change Current DBMS時,可以看到下拉選項中,有一項為Apache Derby。
3、修改數據類型轉換
由於我們復制的oracle的dmbs文件,與derby中,有些數據類型不一致,所以需要修改。在database菜單里,選擇Edit Current DBMS,彈出窗口如下:
左邊是樹型結構,點擊后右邊編輯內容。
修改數據類型時,選擇左側樹:Script -> Data Type。
插兩句話,講一下PD數據庫切換時字段處理的原理。PD本身定義了一套內部的數據類型,如A%n、N、N%s,%p等,其中:
%n is the length of the data type
%s is the size of the data type
%p is the precision of the data type
當我們由一個DBMS A 換成另一個DBMS B時,PD會首先將A的數據類型轉換成PD內部自己定義的數據類型,這個轉換的規則這里叫做 A-PD,然后再將內部的數據類型轉換成B的數據類型,這里叫做PD-B,通過上面兩步轉換實現A到B的類型轉換。
而A-PD的規則,定義在剛才打開的Data Type節點下的PhysDataType節點,PD-B規則定義在AmcdDataType節點下。
舉幾個簡單的例子:
A、Oracle NUMBER -> Derby BIGINT
首先要查看Oracle的dbms文件,注意是Oracle的,展開到PhysDataType節點下,看到有如下映射
Physical Model | Internal
NUMBER | N
所以,經過A-PD規則后,Oracle的NUMBER類型會轉換成PD的內部類型N。
接下來,查看Derby的dbms,打開AmcdDataType節點,找到如下映射:
Internal | Physical Model
N | NUMBER
把上面的NUMBER修改成BIGINT
這樣的話,經過PD-B規則,Derby里的字段就會變成BIGINT類型了。
B、Derby BIGINT -> Oracle NUMBER
與上面類型,不過需要查看Derby的PhysDataType和Oracle的AmcdDataType節點。
從上面兩個例子基本可以看出來PhysDataType節點用來將數據庫類型轉換成PD的類型,而AmcdDataType則將PD的內部類型轉換成數據庫的類型。
另外,可以使用%n,%s,%p實現更精細的轉換,且這三個標識也可以完全由數字代替。
4、注釋
修改列注釋,表格注釋在Script\Objects\Table和Script\Objects\Column節點下。其它修改也很類似,如索引、依賴等等。
實際上,我們最終通過PD生成的SQL,都是由Script\Objects標簽下定義的模板拼起來的。
Script\Sql\Syntax節點下則是一些基本的SQL語法規定,比如注釋以–開始,SQL結束符是;等等。
更多詳細說明可參考手冊:
1、derby:http://db.apache.org/derby/docs/10.9/ref/crefsqlj31068.html
2、PD:http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc38628.1510/doc/html/rad1232022090125.html
3、使用POWERDESIGNER設計數據庫的20條技巧
再說兩句其它的,關於PD生成數據庫設計文檔。
默認的模板生成的文檔,有相當多無用的東西,沒法兒看。所以我們可以自定義文檔模板。在Report -> Report Templates菜單下,在彈出窗口中,點新建,輸入名稱,然后出現編輯模板的界面,分成左右兩塊兒,可以把左邊一些需要的元素直接拖到右邊就OK。報告模板默認放在安裝目錄\Resource Files\Report Templates\下,我們也可以把這個目錄下的文件復制一份,改個名兒,然后在這個基礎上修改。
總之一句話,PD很強大。
