PowerDesigner中設計物理模型1

在PowerDesigner中設計物理模型1——表和主外鍵

在PD中建立物理模型由以下幾種辦法:

  1. 直接新建物理模型。
  2. 設計好概念模型,然後由概念模型生成物理模型。
  3. 設計好邏輯模型,然後由邏輯模型生成物理模型。
  4. 使用逆向工程的方法,連接到現有的數據庫,由數據庫生成物理模型。

物理模型能夠直觀的反應出當前數據庫的結構。在數據庫中的表、視圖、存儲過程等數據庫對象都可以在物理模型中進行設計。由於物理模型和數據庫的一致性,接下來以數據庫對象和物理模型對象的對應來一一介紹:

新建物理模型時需要指定物理模型對應的DBMS,這裏我們使用SQL Server 2008,新建一個物理模型後,系統會顯示一個專門用於物理模型設計的工具欄:

image

若要在物理模型中添加一個表,單擊“表”按鈕,然後再到模型設計面板中單擊一次便可添加一個表,系統默認爲表命名爲Table_n,這裏的n會隨着添加的表增多而順序增加。添加的表是沒有任何列的,如圖所示:

image

單 擊工具欄的鼠標指針按鈕,將鼠標切換回指針模式,然後雙擊一個表,系統將打開表屬性窗口,在General選項卡中可以設置表的Name、Code等屬 性。例如我們要新建一個教室表(ClassRoom),則可修改Name和Code。Name是在模型中顯示的名稱,Code是生成數據庫表的時候的實際 表名。另外Name中的內容還會作爲SQL Server中的表備註。

image

單擊Columns切換到列選項卡,在下面的列表中可以添加表中的列。Name是模型上顯示的名稱,Code是生成的實際的表名,後面的3個複選框P代辦主鍵、F代表外鍵,M代表不能爲空。爲教室表設計了兩個列,如圖所示:

image 

主鍵

在設計一個表時,一般情況下每個表都會有一個主鍵,主鍵分爲單列主鍵和複合主鍵。在爲表設置主鍵時有以下幾種辦法:

1.在Columns選項卡中,直接選中主鍵列的P列複選框,這是最簡單的方式。

2.選中一個列,然後單擊工具欄中的“屬性”按鈕,系統將彈出列屬性窗口,在該窗口中可以設置該列的各種屬性,當然也包括該列是否是否是主鍵。另外還有一個很重要的複選框是“Identity”。選中Identity複選框則表示該列爲自增列。

image

3.切換到Keys選項卡中,在其中添加一行命名爲PK_ClassRoom,然後單擊工具欄的“屬性”按鈕,打開鍵屬性窗口,在該窗口中切換到Columns選項卡,單擊添加列按鈕,彈出列選擇窗口,選中主鍵中應該包含的列,單擊確定按鈕即可完成主鍵的創建。

image

另外需要注意的是,在建立主鍵時,系統會在主鍵上建立索引,索引分爲聚集索引和非聚集索引,在“鍵屬性”窗口的General選項卡中可以設置該主鍵上建立的索引是聚集索引還是非聚集索引,如圖所示:

image

外鍵

如 果是由概念模型或者邏輯模型生成物理模型,那麼外鍵是通過Relationship生成的,也可以通過工具欄中的Reference來實現兩表之間的外鍵 關係。假如一個課程只會在一個固定的教室上課,而一個教室會安排多個課程在不同的時間上課,所以教室和課程是一對多的關係,那麼課程表中就需要添加 RoomID列以形成外鍵列,具體操作方法就是在工具欄中單擊“Reference”按鈕,然後在設計面板中,課程表上按下鼠標左鍵,並拖拽到教師表中放 開鼠標,這時如果課程表中沒有RoomID列,系統會自動創建RoomID列並創建該列上的外鍵引用,如果已經存在RoomID列,則只添加外鍵引用,不 會再添加新列。

 image

切換到鼠標指針模式,雙擊箭頭,系統將彈出引用的屬性窗口,在屬性窗口中可以設置該引用的Name、Code、關聯的列、約束名、更新策略和刪除策略等。

 

在PowerDesigner中設計物理模型2——約束

唯一約束

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

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

在 PD的模型設計面板中,雙擊“教室”表,打開屬性窗口,切換到"”Keys”選項卡,可以看到裏面有一行數據PK_ClassRoom,這是主鍵約束。添 加一行數據,命名爲UQ_RoomName,不能將右邊的“P”列選上,然後單擊工具欄的“屬性”按鈕,彈出UQ_RoomName的屬性窗口,切換到列 選項卡,單擊增加列按鈕,選擇將RoomName列添加到其中,然後單擊確定即可完成唯一約束的添加。

image

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

CHECK約束

CHECK分爲列約束和表約束,列約束是隻對錶中的某一個列進行的約束,可以在列的屬性中進行設置,而表約束是對多個列進行的約束,需要在表的屬性中進行設置(其實列約束也可以在表約束中設置)。

1.標準CHECK約束

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

image

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

參數 說明
Minimum 屬性可接受的最小數
Maximum 屬性可接受的最大數
Default 屬性不賦值時,系統提供的默認值
Unit 單位,如公里、噸、元
Format 屬性的數據顯示格式
Lowercase 屬性的賦值全部變爲小寫字母
Uppercase 屬性的賦值全部變爲大寫字母
Cannot modify 該屬性一旦賦值不能再修改
List Of Values 屬性賦值列表,除列表中的值,不能有其他的值
Label 屬性列表值的標籤

2.直接編寫SQL語句的CHECK約束

在前面彈出ClassName屬性窗口中,單擊左下角的“More”按鈕,系統將彈出更多的選項卡,切換到“Additional Checks”選項卡,可以設置約束名和具體的約束內容,如圖所示:

image

表級的CHECK約束與列級的CHECK約束設置類似,單擊表屬性窗口左下角的“More”按鈕,切換到Check選項卡,設置CHECK約束的命名和SQL語句內容。

image

3.使用Rule創建約束

同 樣以班級名必須以2開頭爲例,通過Rule創建CHECK約束。首先需要創建一個Rule,雙擊Class表,打開表的屬性窗口,切換到Rules選項 卡,單擊“Create a Object”按鈕,系統將打開一個業務規則屬性窗口,修改規則名,並將規則的類型修改爲Constraint,如圖所示:

image

然 後切換到Expression選項卡,設置規則的內容爲“ClassName LIKE '2%'”,單擊確定按鈕即可完成Rule的設置。切換到表屬性的Check選項卡,默認約束內容中的“%RULES%”就是用來表示Rule中設置的內 容,如果我們還有一些其他的CHECK約束內容,不希望在Rule中設置,而是在Check選項卡中設置,那麼只需要刪除%RULES%將CHECK約束 內容添加進去,也可以保留%RULES%,然後在與%RULES%之間添加一個and即可。比如規定ClassID必須小於10000,那麼我們可以將 Check內容設置如下:

image

生成的腳本如下:

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()函數。

image

設置默認值約束的操作如下:雙擊選課表,打開表屬性窗口,選擇ApplyTime字段,單擊工具欄的屬性按鈕,打開列的屬性窗口,切換到Standard Checks選項卡,在Default下拉列表框中選擇getdate()即可。

image

至此我們所有的約束在PD中的設置都介紹完了,下一篇將介紹視圖、存儲過程等數據庫對象。

 

在PowerDesigner中設計物理模型3——視圖、存儲過程和函數

視圖

在SQL Server中視圖定義了一個SQL查詢,一個查詢中可以查詢一個表也可以查詢多個表,在PD中定義視圖與在SQL Server中定義查詢相似。例如要創幾個所有學生的所有選課結果的視圖,那麼在工具欄中選擇視圖按鈕,然後在設計面板中單擊鼠標一次便可添加一個空白的 視圖,切換到鼠標指針模式,雙擊該視圖便可打開視圖的屬性窗口。在General選項卡中,可以設置視圖的名字和其他屬性。

image

Usage是表示視圖是隻讀的視圖還是可更新的視圖,還有一個是check option選項,指定了 CHECK OPTION,也不能依據視圖來驗證任何直接對視圖的基礎表執行的更新。如果我們只創建一般的視圖,那麼就選擇只查詢選項。

Dimensional Type指定該視圖表示的是維度還是事實,這個主要是在進行數據倉庫多維數據建模時使用,一般情況下不需要指定。後面的兩個複選框也不需要進行修改。Type使用默認的view選項。

切換到SQL Query選項卡,在文本框中可以設置視圖定義的查詢內容,建議直接先在SSMS中驗證視圖定義SQL語句的正確性,然後再將SQL語句複製粘貼到該文本 框中。在定義視圖時最好不要使用*,而應該使用各個需要的列名,這樣在視圖屬性的Columns中才能看到每個列。設計SQL Query如圖所示。

image

當然,也可以在PD中使用自帶的SQL編輯器編寫SQL語句,單擊右下角的“Edit with SQL Editor”按鈕,即可彈出SQL Editor編輯器,編寫SQL語句。

存儲過程和函數

存儲過程和用戶自定義函數都是在同一個組件中設置的,在工具欄中單擊Procedure按鈕,然後在設計面板中單擊一次便可添加一個Procedure。例如要創建一個存儲過程根據學生的學號獲得學生所選的課程,那麼對於的操作如下:

在指針模式下雙擊添加的Procedure,打開Procedure屬性窗口,在General選項卡中可以設置該存儲過程的名字。

image

然後切換到Definition選項卡,該選項卡中定義了存儲過程的定義,在下拉列表框中,選擇<Default Procedure>選項,如果是要定義函數,那麼就需要選擇<Default Function>選項,系統會根據選擇的類型創建SQL語句的模板。

image

在下面的SQL語句中,可以將create procedure [%QUALIFIER%]%PROC%保留,其他的刪除,根據自己要創建的存儲過程編寫SQL語句。

create procedure [%QUALIFIER%]%PROC%
@StudentID int
as
begin
select CourseName
from vwStudentCourse
where StudentID=@StudentID
end

單擊確定按鈕,系統會根據編寫的SQL語句,將所使用的表、視圖與存儲過程關聯起來,如圖所示:

image

創建函數的過程與之類似,只是使用的是create function而不是create Procedure而已。

至此,最常見的數據庫對象:表(表的約束)、視圖、存儲過程、函數等在PD的創建已經介紹完了,接下來會介紹PD的設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章