天天看點

在PowerDesigner中設計實體模型2——限制

唯一限制

唯一限制與建立唯一索引基本上是一回事,因為在建立唯一限制的時候,系統會建立對應的一個唯一索引,通過唯一索引來實作限制。不過唯一限制更直覺的表達了對應列的唯一性,使得對應索引的目的更加清晰,是以一般建議建立唯一限制而不是隻建立唯一索引。

在PD中建立唯一限制的操作,以教室表來說,RoomID是主鍵,必然是唯一的,RoomName如果我們也要去必須是唯一的,那麼具體操作如下:

在PD的模型設計面闆中,輕按兩下“教室”表,打開屬性視窗,切換到"”Keys”頁籤,可以看到裡面有一行資料PK_ClassRoom,這是主鍵限制。添加一行資料,命名為UQ_RoomName,不能将右邊的“P”列選上,然後單擊工具欄的“屬性”按鈕,彈出UQ_RoomName的屬性視窗,切換到列頁籤,單擊增加列按鈕,選擇将RoomName列添加到其中,然後單擊确定即可完成唯一限制的添加。

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_6.png"></a>

這樣系統就會自動建立唯一限制。

CHECK限制

CHECK分為列限制和表限制,列限制是隻對表中的某一個列進行的限制,可以在列的屬性中進行設定,而表限制是對多個列進行的限制,需要在表的屬性中進行設定(其實列限制也可以在表限制中設定)。

1.标準CHECK限制

對于一些常用的CHECK限制,可以直接通過設定界面來完成。以班級表為例,ClassName每個學校有自己的命名規則,假設這裡規定ClassName必須以2開頭,那麼需要在ClassName列上定義CHECK限制,使得其滿足命名規範。具體操作是在PD中輕按兩下Class表,打開Class的屬性視窗,切換到列頁籤,選擇ClassName列,單擊工具欄的“屬性”按鈕,彈出ClassName的屬性視窗,切換到StandardChecks頁籤如圖:

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_26.png"></a>

在這個頁籤可以定義屬性的标準檢查限制,視窗中每項的參數的含義,如下:

參數

說明

Minimum

屬性可接受的最小數

Maximum

屬性可接受的最大數

Default

屬性不指派時,系統提供的預設值

Unit

機關,如公裡、噸、元

Format

屬性的資料顯示格式

Lowercase

屬性的指派全部變為小寫字母

Uppercase

屬性的指派全部變為大寫字母

Cannot modify

該屬性一旦指派不能再修改

List Of Values

屬性指派清單,除清單中的值,不能有其他的值

Label

屬性清單值的标簽

2.直接編寫SQL語句的CHECK限制

在前面彈出ClassName屬性視窗中,單擊左下角的“More”按鈕,系統将彈出更多的頁籤,切換到“Additional Checks”頁籤,可以設定限制名和具體的限制内容,如圖所示:

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_8.png"></a>

表級的CHECK限制與列級的CHECK限制設定類似,單擊表屬性視窗左下角的“More”按鈕,切換到Check頁籤,設定CHECK限制的命名和SQL語句内容。

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_10.png"></a>

3.使用Rule建立限制

同樣以班級名必須以2開頭為例,通過Rule建立CHECK限制。首先需要建立一個Rule,輕按兩下Class表,打開表的屬性視窗,切換到Rules頁籤,單擊“Create a Object”按鈕,系統将打開一個業務規則屬性視窗,修改規則名,并将規則的類型修改為Constraint,如圖所示:

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_16.png"></a>

然後切換到Expression頁籤,設定規則的内容為“ClassName LIKE '2%'”,單擊确定按鈕即可完成Rule的設定。切換到表屬性的Check頁籤,預設限制内容中的“%RULES%”就是用來表示Rule中設定的内容,如果我們還有一些其他的CHECK限制内容,不希望在Rule中設定,而是在Check頁籤中設定,那麼隻需要删除%RULES%将CHECK限制内容添加進去,也可以保留%RULES%,然後在與%RULES%之間添加一個and即可。比如規定ClassID必須小于10000,那麼我們可以将Check内容設定如下:

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_18.png"></a>

生成的腳本如下:

create table Class ( 

   ClassID              int                  not null, 

   ClassName            varchar(20)          not null, 

   constraint PK_CLASS primary key nonclustered (ClassID), 

   constraint CKT_CLASS check (ClassID&lt;10000), 

   constraint ClassNameRule check (ClassName LIKE '2%') 

go

可以看到,根據Rule生成的CHECK限制與在Check頁籤中設定的限制将分别建立一個限制,互相并不影響。

預設限制

預設限制是使用者在沒有輸入值的情況下,系統給出預設的值。最常用的是CreateTime字段,設定預設值為getdate(),在使用者建立一行資料時記錄下建立時間。例如對于選課表,需要記錄下選課的時間,則可以設定ApplyTime的預設值為getdate()函數。

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_22.png"></a>

設定預設值限制的操作如下:輕按兩下選課表,打開表屬性視窗,選擇ApplyTime字段,單擊工具欄的屬性按鈕,打開列的屬性視窗,切換到Standard Checks頁籤,在Default下拉清單框中選擇getdate()即可。

<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_24.png"></a>

至此我們所有的限制在PD中的設定都介紹完了,下一篇将介紹視圖、存儲過程等資料庫對象。

本文轉自深藍居部落格園部落格,原文連結:http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html,如需轉載請自行聯系原作者