最近在使用PowerDesigner建模數據庫,在使用中積累了一些遇到的問題和解決辦法,記錄下來,希望對遇到同樣問題的朋友有所幫助。
早期在PowerDesigner中,只有概念模型和物理模型,一般是先建立概念默認,然后根據具體的數據庫生成物理模型。但是概念模型太抽象,物理模型太具體,於是在PowerDesigner15版本之后出現了“邏輯模型”,能夠從概念模型和物理模型各自的角度上都容易理解。所以現在的數據庫建模方式就變成了先建立概念模型然后生成邏輯模型,修改了邏輯模型后,最后生成物理模型,由物理模型生成數據庫腳本。
在生成物理模型時,遇到了以下幾個問題:
一.在選擇生成SQL Server 2005或者SQL Server 2008時,沒有將Date類型和Time類型轉化為Date類型和Time類型,而是轉化為了DateTime類型。這點非常受不了,本來在概念設計時就分了Date ,Time,DateTime,結果轉化到SQL Server后就全部變成了DateTime了。
SQL Server 從2005開始就支持單獨的Date類型和Time類型了,而不像SQL Server2000那樣,只有DateTime和SmallDateTime。解決辦法如下:
1.打開該物理模型或者隨便新建一個空白的SQL Server 2008的物理模型。
2.選擇菜單“Database”下的“Edit Current DBMS”選項,打開了DBMS Properties對話框。
3.在General選項卡中,展開Script、DataType,選中AmcdDataType,可以看到內部數據類型和物理數據類型的映射表,將D和T對應的數據類型改為date和time,然后點擊“確定”保存該更改。
4.回到邏輯模型,重新生成物理模型,即可。
二、生成的物理模型默認情況下模型驗證不通過,“Constraint name uniqueness”,生成的外鍵名時單詞簡略的有點奇怪。
這種情況下的解決辦法和上一個問題的解決辦法類似,還是在DBMS Properties中進行修改。
1.打開DBMS Properties窗口。
2.在General選項卡中,展開Script、Object、Reference,選中ConstName,可以看到Value值為FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%,這個規則我個人不是很喜歡,容易造成重名,所以我打算使用FK_加上Reference的Code來生成外鍵名,所以改為:FK_%REFRCODE%
3.保存,重新生成。
三、默認生成的主鍵是非聚集索引,應該默認是聚集索引。
這個問題比較麻煩,不知道為什么生成的主鍵索引是非聚集索引,但是簡單的改法也是與上面操作類似。
找到Script、Object、PKey的Create選項,其Value值如下:
alter table [%QUALIFIER%]%TABLE%[%R%?[ with nocheck][ with check]]
add [constraint %CONSTNAME% ]primary key [%CLUSTER%?[%R%?[clustered ]]:nonclustered ](%PKEYCOLUMNS%)
[%OPTIONS%]
這里有一個控制是否聚集索引的開關%CLUSTER%和%R%,不知道這兩個變量是在哪里設置的,不過可以簡單粗暴的將該腳本改為:
alter table [%QUALIFIER%]%TABLE%[%R%?[ with nocheck][ with check]]
add [constraint %CONSTNAME% ]primary key clustered (%PKEYCOLUMNS%)
[%OPTIONS%]
這樣生成的腳本就是Cluster的了。