天天看點

PowerDesigner資料庫模組化name和code寫反了怎麼辦?

name和code的輸入錯誤:有一位網友使用PowerDesigner進行資料庫模組化,由于對PowerDesigner的使用不熟悉,勿以為對表中的列生成腳本會使用name而不是code。該網友的本意是:使用中文作為注釋便于了解和溝通,而sql腳本則采用英文。但是正是由于對這個概念沒有弄清楚,恰恰将name和code弄錯,code輸入列中輸入了中文,name列中輸入了英文。如下圖所示:

   <script language="JavaScript" type="text/javascript">resizeImage('http://dev.csdn.net/Develop/ArticleImages/22/22565/CSDN_Dev_Image_2003-12-51405510.gif','image0')</script>

  是以生成的腳本如下:

  ========================================

  create table 學生 (

   學号 int null,

   姓名 varchar(20) null,

   年齡 smallint null,

   性别 bit null,

   已婚 bit null,

   身份證号 varchar(18) null,

   備注 varchar(50) null

  )

  ========================================

  這恰恰和他的本意相違背,是以,為了正确的生成英文腳本時,不得不手動将name和code以正确的中英文次序再重新輸入一次,模型中有幾十張表,該工作耗費了大量寶貴的開發的時間,造成了不必要的損失。

  讨論:

  要解決這個問題我們要首先要了解PowerDesigner是如何成腳本。在 2.15PowerDesigner的變量一節中曾經提到,很多對象都既包含一個代碼變量(code variable)又包含一個生成代碼變量(generated code variable)。代碼(code)變量是在對象屬性視窗中定義的屬性代碼,而生成代碼(generated code)變量則是根據對象的屬性代碼和生成選項計算而産生的,如果代碼(Code)的長度超過了DBMS中限制的最大長度,則會自動截取code産生生成代碼(generated code)。而PowerDesigner在預設情況下生成腳本既不是采用name也不是code,而是代碼(code)生成的“生成代碼”(generated code)作為對象的名稱。而通常情況下由于code本身沒有超過DBMS規定的最大長度,是以會給人一種錯誤的認識,認為腳本生成使用的是code作為名稱。

  這樣,在這個例子中解決問題的思路就很清楚了,如果可以采用name來生成英文代碼就可以解決該問題,換句話說,就是用name(名稱)替換generated code(生成代碼)。參考 2.15PowerDesigner的變量一節中的變量清單:“用于定義表的變量”,可得知COLUMN是列的生成代碼,COLNNAME是列名稱(name),COLNCODE是列代碼(code)。

  COLNCODE和COLUMN不同之處在于COLUMN是列的生成代碼,即COLNCODE在DBMS最大長度範圍内的code,如果code太長,就會被截取一部分,這時候的COLUMN就和COLNCODE就不相等了,但通常情況下code不會超過最大長度即與COLUMN相等。

  解決方案:

  如下圖所示,選擇Database->Edit current database,選擇script->object->column->add

   <script language="JavaScript" type="text/javascript">resizeImage('http://dev.csdn.net/Develop/ArticleImages/22/22565/CSDN_Dev_Image_2003-12-51405512.gif','image1')</script>

  圖表 2.15.2.1

  可以在視窗右方的Value編輯框中看到定義表中列的代碼模闆:

  ==========================================

  %20:COLUMN%[%COMPUTE%?AS(%COMPUTE%):%20:DATATYPE%[%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]

  [[constraint %CONSTNAME%] check (%CONSTRAINT%)]]

  ==========================================

  參考 2.15.2 PowerDesigner中對變量格式化一節,此外,由于變量在PowerDesigner中的引用需要加“% %”,是以很容易了解代碼模闆中的“%20:COLUMN%”表示對列的生成代碼(generated code)采用固定長度20位,而我們需要做的正是将COLUMN換為COLNNAME,也就是将“%20:COLNNAME%”換為“%20:COLNNAME%”,然後點選确定,彈出确認視窗,點選“是”表示儲存該修改。進入表中的priview屬性頁中可以檢視代碼發生變化,基本上解決了這個問題:

  ==========================================

  create table 學生 (

   studenNo int null,

   studentName varchar(20) null,

   age smallint null,

   gender bit null,

   isMarried bit null,

   idCardNo varchar(18) null,

   description varchar(50) null

  )

  ==========================================

  觀察代碼發現表名稱還是采用了這位網友輸入的相反的中文,我們可以用相同的方法,Database->Edit current database,選擇Script->Object->Table->Create将%TABLE%換為%TNAME%,這樣,便會發現腳本中的“學生”也會正确的成為“student”。

  通過這種方法,這個問題的解決隻需要花費不到一分鐘的時間,而不需要動辄手動修改數小時,讓人頭暈眼花沒有一絲成就感。