6.1物理數據模型簡介
6.1.1 PDM的概念
PDM模型依賴于使用者想要使用的數據庫管理系統(DBMS)的類型,使用者可以在Power Designer中使用不同的DBMS類型。PDM模型的示意圖如下圖所示:
PDM模型的示意圖
在上圖中:
(1)可操作的PDM:可以使用PDM模型設計一個可操作的數據庫,通常情況,在數據建模時,物理模型建模在CDM模型或LDM模型建模之后,它將細化一個實際的數據庫實現的細節,以便適應性能和物理限制。
(2)商業智能PDM:可以使用PDM模型來設計數據環境的結構,包括:
Ø 數據倉庫或數據集市數據庫:包括可操作的數據庫中填入的數據,以及可能需要在聯機分析處理數據庫中使用的所有信息。可以使用PDM模型來設計數據倉庫或數據集市數據庫,這些數據庫通常包括存儲了非常大型的數據,可以為OLAP數據庫中多重結構的預覽的數據庫表定義類型。
Ø 多維的OLAP數據庫:這通常是封裝了數據,首先被聚集在數據倉庫和數據集市(雖然有時是直接從操作數據庫傳輸),并促進組織的信息查詢通過不同的工具。業務分析師使用OLAP數據庫發送查詢,并從數據庫中現有的不同維度的信息檢索業務,使用者可以使用PDM多維圖表來設計OLAP數據庫中不同維度和不同web的內容。
Power Designer支持DBMS,超過50種,例如Oracle、MySQL、Microsoft SQL Server、DB2和Informix等常見的DBMS,Power Designer支持的DBMS如下圖所示:
Power Designer支持的DBMS列表
6.1.2 PDM的作用
PDM模型的主要作用:
(1)可以完成多種常用數據庫的物理模型設計;
(2)可以根據當前的PDM模型設計生成SQL腳本或數據庫;
(3)可以逆向從SQL腳本或連接數據庫生成PDM模型;
(4)可以轉換為XML模型、OOM模型、CDM模型或LDM模型;
(5)可以簡便的從一個數據庫移植到另一個數據庫;
(6)可以方便的從一種DBMS類型變更為另一種DBMS類型;
(7)可以預估數據庫的規模;
(8)可以定義測試數據;
(9)可以定制生成標準的模型報告。
6.1.3 PDM的基本術語
與CDM模型的實體、屬性、主標識符、候選標識符、聯系和域等基本術語相對應,PDM模型中包括表、字段、主鍵、候選鍵、外鍵和域等基本術語。另外,PDM模型還具有與數據庫管理系統相關的索引、視圖、存儲過程、存儲函數、觸發器、參照和序列等。
1、表
表是存儲數據庫信息的基本單位,它以行和列的方式表示數據,它主要包括如下對象:
(1)列:某個表的命名屬性,用于描述表的特征。
(2)索引:基于表的一種特殊的數據結構,它在邏輯上基于鍵的值排序,常用于提高查詢速度。
(3)鍵:可以是列或列的組合,用來唯一標識表的唯一行。每個鍵將創建一個唯一索引或者一個目標庫的唯一約束。
(4)觸發器:表的一個SQL代碼段,存儲在數據庫中,當嘗試對相關的表視圖做修改或查詢操作時觸發器被自動被調用。
2、列
列通常被稱為字段,它用于表示一行數據中特別的一個數據項。當定義一列時,必須指定name和code屬性,而且需要選擇數據類型,可以從眾多數據類型中選擇,也可將某列綁定到域。
3、主鍵、候選鍵和外鍵
一個鍵可以是某一個列或列的組合,它唯一的標識表中的一行。每個鍵會創建一個唯一索引,或者到指定數據庫的一個唯一的約束。
PDM模型支持如下三種鍵:
(1)主鍵:可以由某一個列或多個列組成主鍵,在表中主鍵能唯一標識某行。需要注意的是,一個表只能有一個主鍵。
(2)候選鍵:可以由某列或多個列組成候選鍵,在表中候選鍵能唯一標識某行。可以包括多個候選鍵,而且不能與主鍵列一致。
(3)外鍵:可以由某列或多個列組成外鍵鍵,外鍵的值需要是另一個表的主鍵或候選鍵。
4、索引
基于表的一種特殊的數據結構,它在邏輯上基于鍵的值排序,常用于提高查詢速度。一般在一些訪問有規律,而且對時間要求高的列上創建索引,索引在包含唯一值的一到多個列上最為高效。
索引分為如下三種類型:
(1)唯一索引:不會有兩條索引具有相同鍵值。
(2)非唯一索引:可能有多條索引具有相同鍵值,不對索引列的屬性值進行唯一性約束。
(3)復合索引:在多個列上創建的索引。
5、默認值
默認值指的是數據庫系統中某個列或某個域的默認值。例如為會員表的“state”(狀態)字段設定默認值為0。
6、域
域幫助識別模型中信息的類型。它定義某個列或實體屬性的有效值。使用域有利于列或實體屬性的標準化,它提取不同表中某些相同列的共性。
在PDM模型中,域定義時可以包括如下信息:
(1)數據類型、數據長度和精度;
(2)檢查參數;
(3)業務規則;
7、視圖
視圖是從查詢一個表或多個表數據的一種特定方式,它是一個表或多個表的列的集合。
視圖又被稱為虛擬表,視圖并不在數據庫中以存儲的數據值集形式存在,數據庫中僅僅只有存儲視圖的定義,從數據庫系統內部來看,視圖是由一張或多張表中的數據組成的,從數據庫系統外部來看,視圖就如同一張表一樣,對表能夠進行的一般操作都可以應用于視圖,例如查詢,插入,修改和刪除操作等。
視圖的優點:
(1)安全性:通過視圖用戶只能查看和修改其所能看到的數據,其它數據庫或表既不可見也不可以訪問。如果某一用戶想要訪問視圖的結果集,必須為其授予訪問權限。視圖所引用表的訪問權限與視圖權限的設置互不影響。
(2)簡化用戶對數據的操作:在定義視圖時,視圖本身就是一個復雜查詢的結果集,這樣在每一次執行相同的查詢時,不必重新寫這些復雜的查詢語句,只要一條簡單的查詢視圖語句即可。可見視圖向用戶隱藏了表與表之間的復雜的連接操作。
(3)定制數據:視圖能夠實現讓不同的用戶以不同的方式看到不同或相同的數據集。因此,當有許多不同水平的用戶共用同一數據庫時,這顯得極為重要。
(4)合并切分數據:在有些情況下,由于表中數據量太大,故在表的設計時常將表進行水平切分或垂直切分,但表的結構的變化卻對應用程序產生不良的影響。如果使用視圖就可以重新保持原有的表結構關系,從而使外模式保持不變,原有的應用程序仍可以通過視圖來重載數據。
8、存儲過程
存儲過程是在大型數據庫管理系統中,一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫管理系統中,用戶通過指定存儲過程的名字并給出輸入參數(如果該存儲過程帶有參數)來執行存儲過程。存儲過程是數據庫中的一個重要對象,一個設計良好的數據庫應用程序可以用到存儲過程。
存儲過程的優點:
(1)安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權限應用于存儲過程。
(2)重復使用:存儲過程可以重復使用,從而可以減少數據庫開發人員的工作量。
(3)提高性能:存儲過程在創建的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執行一次就需要編譯一次,所以使用存儲過程提高了效率。
(4)減少網絡流量:存儲過程位于服務器上,調用的時候只需要傳遞存儲過程的名稱以及參數,因此降低了網絡傳輸的數據量。
存儲過程的缺點:
(1)調試問題:調試比較麻煩,但是某些工具軟件可以彌補這個缺點。
(2)移植問題:存儲過程代碼可能與相應數據庫系統和版本相關,如果存在換數據庫系統類型的可能性,可能造成移植工作量的大幅增加。
(3)重新編譯問題:因為存儲過程代碼是運行前編譯的,如果帶有引用關系的對象發生改變時,受影響的存儲過程、包將需要重新編譯(不過也可以設置成運行時自動編譯)。
9、存儲函數
存儲函數與存儲函數類似,兩者的唯一區別是存儲函數總是向調用者返回數據,而存儲過程則不返回數據。
10、觸發器
觸發器與存儲過程類似,觸發器是存儲在數據庫管理系統中為完成某個特定功能而編寫的程序塊。觸發器與存儲過程的區別在于,存儲過程需要顯式調用,而觸發器可以由特定事件自動觸發,它是隱式調用。
觸發器一般分為以下幾類:
(1)DML觸發器:由DML語句觸發,例如INSERT、UPDATE和DELETE語句。按照觸發時間,DML觸發器又被分為BEFORE觸發器和AFTER觸發器,分別表示在DML事件發生之前還是發生之后調用觸發器。又可分為語句觸發器和行級觸發器,前者針對某一條語句觸發一次,而后者針對語句所影響的每一行都觸發一次。例如某條DELETE語句刪除某個表的50行數據,針對該DELETE事件的語句級觸發器將被觸發一次,而行級觸發器將被觸發50次。
(2)DDL觸發器:由DDL語句觸發,例如CREATE、ALTER和DROP語句。按照觸發時間,DDL觸發器又被分為BEFORE觸發器和AFTER觸發器。
(3)替代觸發器:用于執行一個替代操作來代替觸發事件的操作。例如針對INSERT事件的INSTEAD OF觸發器,當出現INSERT語句時,該語句不會被執行,而是執行INSTEAD OF觸發器中定義的語句。該類觸發器只能創建在視圖上,而且不能指定BEFORE或AFTER處罰時間選項。
(4)系統事件觸發器:發生在數據庫啟動或關閉等系統事件時觸發器,例如數據庫服務器的啟動或關閉、用戶的登錄和退出,或者數據庫服務錯誤等。
11、檢查參數
檢查參數是對數據保證有效性的一系列條件的集合。
有三種類型的檢查參數:
(1)標準檢查參數:可用在列和實體屬性中,指定數據列的范圍,例如指定數據的最大值和最小值等。
(2)附加檢查參數:可用在列和實體屬性中,使用SQL表達式來限制,可使用具化的標準參數值,例如%MINMAX%、%LISTVAL%和%RULES%等變量。
(3)驗證規則:可用在表、實體、列或實體屬性中,用于指定業務規則。
12、業務規則
業務規則是具體業務的規則,可以按照政府約定、客戶需求或內部指導文件進行指定。例如客戶等級分為6個等級。在設計的過程中,可以將這些約定細化,例如約定1表示普通客戶……6表示高級大客戶等。
業務規則指引或文檔化模型的創建過程。例如“會員只能屬于一個區域”的規則能夠幫助設計人員創建會員和區域的關聯關系。
業務規則不好被圖形化,Power Designer中的業務規則使用信息對圖形模型進行補充。例如某些規則指定表格公式或有效性規則,這些技術表達式無法使用圖形表示出來。
13、完整性約束
數據庫完整性是指數據庫中數據的正確性、有效性和相容性。數據庫完整性由各種各樣的完整性約束來保證,因此可以說數據庫完整性設計就是數據庫完整性約束的設計。數據庫完整性約束可以通過DBMS或應用程序來實現,基于DBMS的完整性約束作為模式的一部分存入數據庫中。
完整性約束分為如下三類:
(1)實體完整性:指表中行的完整性。主要用于保證操作的記錄非空、唯一且不重復。即實體完整性要求每個表有且僅有一個主鍵,每一個主鍵值必須唯一,而且不允許為NULL或重復。
(2)參照完整性:若屬性組F是關系模式R1的主鍵,同時F也是關系模式R2的外鍵,則在R2的關系中,F的取值只允許兩種可能:空值或等于R1關系中某個主鍵值。
(3)用戶自定義完整性:包括列的值域、列類型和列有效規則(如小數位數)等約束,是由確定關系結構時所定義的字段的屬性決定的。例如,百分制成績的取值范圍在0~100之間等。
14、用戶
為了保護數據庫中各類數據的安全,不同的數據庫管理系統提供了不同的安全管理措施。例如:用戶(Usser)、用戶組(Group)、角色(Role)、系統權限(System Privilege)和對象權限(Object Premission)等,以此保障數據庫管理系統的安全。
用戶(User)是指能連接到數據庫的一個用戶。用戶可以歸屬于一個特定的用戶組(Group)或角色(Role),也可以歸屬于一個公共用戶組。
用戶可以同時擁有系統權限(System Privilege)和對象權限(Object Premission),用戶的權限是這兩類權限的合集。系統權限指的是用戶針對某一類數據庫對象或數據庫管理的操作權利,例如創建表、創建數據庫、連接數據庫和刪除數據庫等。對象權限是指用戶對某個數據庫對象的操作權利,例如對“會員表”的查詢、插入、刪除和更新操作權限等。
15、同義詞
同義詞(Synonyms)又稱為數據庫對象的別名(Alias),同義詞與其源對象具有相同的對象屬性,一個數據庫對象可以有多個同義詞。