PowerDesigner中如何新增約束

2021-06-03 05:45:21 字數 2271 閱讀 8125

唯一約束 

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

在pd中建立唯一約束的操作,以教室表來說,roomid是主鍵,必然是唯一的,roomname如果我們也要去必須是唯一的,那麼具體操作如下: 

在pd的模型設計面板中,雙擊「教室」表,開啟屬性視窗,切換到"」keys」選項卡,可以看到裡面有一行資料pk_classroom,這是主鍵約束。新增一行資料,命名為uq_roomname,不能將右邊的「p」列選上,然後單擊工具欄的「屬性」按鈕,彈出uq_roomname的屬性視窗,切換到列選項卡,單擊增加列按鈕,選擇將roomname列新增到其中,然後單擊確定即可完成唯一約束的新增。 

這樣系統就會自動建立唯一約束。 

check約束 

check分為列約束和表約束,列約束是只對錶中的某乙個列進行的約束,可以在列的屬性中進行設定,而表約束是對多個列進行的約束,需要在表的屬性中進行設定(其實列約束也可以在表約束中設定)。 

1.標準check約束 

對於一些常用的check約束,可以直接通過設定介面來完成。以班級表為例,classname每個學校有自己的命名規則,假設這裡規定classname必須以2開頭,那麼需要在classname列上定義check約束,使得其滿足命名規範。具體操作是在pd中雙擊class表,開啟class的屬性視窗,切換到列選項卡,選擇classname列,單擊工具欄的「屬性」按鈕,彈出classname的屬性視窗,切換到standardchecks選項卡如圖: 

在這個選項卡可以定義屬性的標準檢查約束,視窗中每項的引數的含義,如下: 

引數 說明 

minimum 屬性可接受的最小數 

maximum 屬性可接受的最大數 

default 屬性不賦值時,系統提供的預設值 

unit 單位,如公里、噸、元 

format 屬性的資料顯示格式 

lowercase 屬性的賦值全部變為小寫字母 

uppercase 屬性的賦值全部變為大寫字母 

cannot modify 該屬性一旦賦值不能再修改 

list of values 屬性賦值列表,除列表中的值,不能有其他的值 

label 屬性列表值的標籤 

2.直接編寫sql語句的check約束 

在前面彈出classname屬性視窗中,單擊左下角的「more」按鈕,系統將彈出更多的選項卡,切換到「additional checks」選項卡,可以設定約束名和具體的約束內容,如圖所示: 

表級的check約束與列級的check約束設定類似,單擊表屬性視窗左下角的「more」按鈕,切換到check選項卡,設定check約束的命名和sql語句內容。 

3.使用rule建立約束 

同樣以班級名必須以2開頭為例,通過rule建立check約束。首先需要建立乙個rule,雙擊class表,開啟表的屬性視窗,切換到rules選項卡,單擊「create a object」按鈕,系統將開啟乙個業務規則屬性視窗,修改規則名,並將規則的型別修改為constraint,如圖所示: 

然後切換到expression選項卡,設定規則的內容為「classname like '2%'」,單擊確定按鈕即可完成rule的設定。切換到表屬性的check選項卡,預設約束內容中的「%rules%」就是用來表示rule中設定的內容,如果我們還有一些其他的check約束內容,不希望在rule中設定,而是在check選項卡中設定,那麼只需要刪除%rules%將check約束內容新增進去,也可以保留%rules%,然後在與%rules%之間新增乙個and即可。比如規定classid必須小於10000,那麼我們可以將check內容設定如下: 

生成的指令碼如下: 

create table class ( 

classid              int                  not null, 

classname            varchar(20)          not null, 

constraint pk_class primary key nonclustered (classid), 

constraint ckt_class check (classid<10000), 

constraint classnamerule check (classname like '2%') 

) go 

可以看到,根據rule生成的check約束與在check選項卡中設定的約束將分別建立乙個約束,相互並不影響。 

預設約束 

PowerDesigner中的問題

1.id使用inerger然後設為主鍵後,生成sql不能夠自動編號。解決 生成sql自增id列的方法是,把cmd圖的id列的字段型別選擇為serial,但是他生成的是number的自增列,沒有辦法生成int的自增列,如果有人知道,請告訴我,不勝感謝。2.按照書上的生成的字元型的字段是varchar,...

PowerDesigner中的繼承方式

在使用powerdesigner設計rdbms資料庫的時候,發現其中的子類貌似與課程老師所講的不太一樣,查資料發現,關於繼承就有三種實現方式。比如在乙個教務系統中,有老師學生2個物件,這兩個物件都是 人 物件的子類,所以我們可以建立乙個person表,該錶有人的公共屬性 姓名 性別等,還有就是資料的...

PowerDesigner中幾個使用技巧

一 主鍵自增 二 設定列的約束 三 修改name和code一起改變的選項 tools generator options dialog name to code mirroring 不勾選 四 檢視中同時顯示name code等 五 將資料表匯出成指令碼 快捷鍵是 ctrl g 操作是 databa...