在PowerDesigner中設計實體模型1——表和主外鍵
在PD中建立實體模型由以下幾種辦法:
- 直接建立實體模型。
- 設計好概念模型,然後由概念模型生成實體模型。
- 設計好邏輯模型,然後由邏輯模型生成實體模型。
- 使用逆向工程的方法,連接配接到現有的資料庫,由資料庫生成實體模型。
實體模型能夠直覺的反應出目前資料庫的結構。在資料庫中的表、視圖、存儲過程等資料庫對象都可以在實體模型中進行設計。由于實體模型和資料庫的一緻性,接下來以資料庫對象和實體模型對象的對應來一一介紹:
表
建立實體模型時需要指定實體模型對應的DBMS,這裡我們使用SQL Server 2008,建立一個實體模型後,系統會顯示一個專門用于實體模型設計的工具欄:

若要在實體模型中添加一個表,單擊“表”按鈕,然後再到模型設計面闆中單擊一次便可添加一個表,系統預設為表命名為Table_n,這裡的n會随着添加的表增多而順序增加。添加的表是沒有任何列的,如圖所示:
單 擊工具欄的滑鼠指針按鈕,将滑鼠切換回指針模式,然後輕按兩下一個表,系統将打開表屬性視窗,在General頁籤中可以設定表的Name、Code等屬 性。例如我們要建立一個教室表(ClassRoom),則可修改Name和Code。Name是在模型中顯示的名稱,Code是生成資料庫表的時候的實際 表名。另外Name中的内容還會作為SQL Server中的表備注。
單擊Columns切換到列頁籤,在下面的清單中可以添加表中的列。Name是模型上顯示的名稱,Code是生成的實際的表名,後面的3個複選框P代辦主鍵、F代表外鍵,M代表不能為空。為教室表設計了兩個列,如圖所示:
主鍵
在設計一個表時,一般情況下每個表都會有一個主鍵,主鍵分為單列主鍵和複合主鍵。在為表設定主鍵時有以下幾種辦法:
1.在Columns頁籤中,直接選中主鍵列的P列複選框,這是最簡單的方式。
2.選中一個列,然後單擊工具欄中的“屬性”按鈕,系統将彈出列屬性視窗,在該視窗中可以設定該列的各種屬性,當然也包括該列是否是否是主鍵。另外還有一個很重要的複選框是“Identity”。選中Identity複選框則表示該列為自增列。
3.切換到Keys頁籤中,在其中添加一行命名為PK_ClassRoom,然後單擊工具欄的“屬性”按鈕,打開鍵屬性視窗,在該視窗中切換到Columns頁籤,單擊添加列按鈕,彈出列選擇視窗,選中主鍵中應該包含的列,單擊确定按鈕即可完成主鍵的建立。
另外需要注意的是,在建立主鍵時,系統會在主鍵上建立索引,索引分為聚集索引和非聚集索引,在“鍵屬性”視窗的General頁籤中可以設定該主鍵上建立的索引是聚集索引還是非聚集索引,如圖所示:
外鍵
如 果是由概念模型或者邏輯模型生成實體模型,那麼外鍵是通過Relationship生成的,也可以通過工具欄中的Reference來實作兩表之間的外鍵 關系。假如一個課程隻會在一個固定的教室上課,而一個教室會安排多個課程在不同的時間上課,是以教室和課程是一對多的關系,那麼課程表中就需要添加 RoomID列以形成外鍵列,具體操作方法就是在工具欄中單擊“Reference”按鈕,然後在設計面闆中,課程表上按下滑鼠左鍵,并拖拽到教師表中放 開滑鼠,這時如果課程表中沒有RoomID列,系統會自動建立RoomID列并建立該列上的外鍵引用,如果已經存在RoomID列,則隻添加外鍵引用,不 會再添加新列。
切換到滑鼠指針模式,輕按兩下箭頭,系統将彈出引用的屬性視窗,在屬性視窗中可以設定該引用的Name、Code、關聯的列、限制名、更新政策和删除政策等。
在PowerDesigner中設計實體模型2——限制
唯一限制
唯一限制與建立唯一索引基本上是一回事,因為在建立唯一限制的時候,系統會建立對應的一個唯一索引,通過唯一索引來實作限制。不過唯一限制更直覺的表達了對應列的唯一性,使得對應索引的目的更加清晰,是以一般建議建立唯一限制而不是隻建立唯一索引。
在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頁籤中設定的限制将分别建立一個限制,互相并不影響。
預設限制
默
認限制是使用者在沒有輸入值的情況下,系統給出預設的值。最常用的是CreateTime字段,設定預設值為getdate(),在使用者建立一行資料時記錄
下建立時間。例如對于選課表,需要記錄下選課的時間,則可以設定ApplyTime的預設值為getdate()函數。
設定預設值限制的操作如下:輕按兩下選課表,打開表屬性視窗,選擇ApplyTime字段,單擊工具欄的屬性按鈕,打開列的屬性視窗,切換到Standard Checks頁籤,在Default下拉清單框中選擇getdate()即可。
至此我們所有的限制在PD中的設定都介紹完了,下一篇将介紹視圖、存儲過程等資料庫對象。
在PowerDesigner中設計實體模型3——視圖、存儲過程和函數
視圖
在SQL Server中視圖定義了一個SQL查詢,一個查詢中可以查詢一個表也可以查詢多個表,在PD中定義視圖與在SQL
Server中定義查詢相似。例如要創幾個所有學生的所有選課結果的視圖,那麼在工具欄中選擇視圖按鈕,然後在設計面闆中單擊滑鼠一次便可添加一個空白的
視圖,切換到滑鼠指針模式,輕按兩下該視圖便可打開視圖的屬性視窗。在General頁籤中,可以設定視圖的名字和其他屬性。
Usage是表示視圖是隻讀的視圖還是可更新的視圖,還有一個是check option選項,指定了 CHECK OPTION,也不能依據視圖來驗證任何直接對視圖的基礎表執行的更新。如果我們隻建立一般的視圖,那麼就選擇隻查詢選項。
Dimensional Type指定該視圖表示的是次元還是事實,這個主要是在進行資料倉庫多元資料模組化時使用,一般情況下不需要指定。後面的兩個複選框也不需要進行修改。Type使用預設的view選項。
切換到SQL
Query頁籤,在文本框中可以設定視圖定義的查詢内容,建議直接先在SSMS中驗證視圖定義SQL語句的正确性,然後再将SQL語句複制粘貼到該文本
框中。在定義視圖時最好不要使用*,而應該使用各個需要的列名,這樣在視圖屬性的Columns中才能看到每個列。設計SQL Query如圖所示。
當然,也可以在PD中使用自帶的SQL編輯器編寫SQL語句,單擊右下角的“Edit with SQL Editor”按鈕,即可彈出SQL Editor編輯器,編寫SQL語句。
存儲過程和函數
存儲過程和使用者自定義函數都是在同一個元件中設定的,在工具欄中單擊Procedure按鈕,然後在設計面闆中單擊一次便可添加一個Procedure。例如要建立一個存儲過程根據學生的學号獲得學生所選的課程,那麼對于的操作如下:
在指針模式下輕按兩下添加的Procedure,打開Procedure屬性視窗,在General頁籤中可以設定該存儲過程的名字。
然後切換到Definition頁籤,該頁籤中定義了存儲過程的定義,在下拉清單框中,選擇<Default
Procedure>選項,如果是要定義函數,那麼就需要選擇<Default
Function>選項,系統會根據選擇的類型建立SQL語句的模闆。
在下面的SQL語句中,可以将create procedure [%QUALIFIER%]%PROC%保留,其他的删除,根據自己要建立的存儲過程編寫SQL語句。
create procedure [%QUALIFIER%]%PROC%
@StudentID int
as
begin
select CourseName
from vwStudentCourse
where StudentID=@StudentID
end
單擊确定按鈕,系統會根據編寫的SQL語句,将所使用的表、視圖與存儲過程關聯起來,如圖所示: