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