數據庫的結構(例如表、關系、視圖和觸發器)稱為數據庫模式。可使用 SQL 語句創建這些元素并按照所需的方式進行排列,但是如果不使用圖形工具,則可能會造成混淆。
PowerDesigner 提供了一種數據庫結構的圖形表示。只需繪制新表或輸入信息,即可更好地修改數據庫的結構或創建全新的表。在設計完成后,PowerDesigner 可生成一個 SQL 腳本以生成新的數據庫。
下面的圖示顯示了示例數據庫的結構,可以使用 PowerDesigner 方便地創建此圖示。
數據庫的性能主要取決于設計。一般地,應將不同類型對象的信息(例如雇員或產品)存儲在單獨的表中。
可以使用參照來確定這些表之間的關系,即用一個表中的外鍵來標識另一個表中的特定行。參照可以表示多對一和一對多關系。多對多關系需要兩個參照和另外一個表。
有關數據庫設計的詳細信息,請參見設計數據庫。
若要了解 PowerDesigner 的詳細信息,請單擊 PowerDesigner 主窗口工具欄中的 [Help] 以訪問下面三本書:PowerDesigner General Features Guide、PowerDesigner PDM User's Guide 和 PowerDesigner Report User's Guide。
要獲得更多 PowerDesigner 教程,請打開 PowerDesigner。從 [Help] 菜單中選擇 [Where to Start] > [PDM Getting Started]。此操作可訪問 Physical Data Model Getting Started 一書。
PowerDesigner 可以從用于創建數據庫的腳本文件讀取數據庫的結構。但是,通常更簡便的方法是:從 PowerDesigner 連接到數據庫并使用反向工程特性直接抽取設計。
下面的教程將示例數據庫作為起點。此教程在闡述 PowerDesigner 時對示例數據庫進行了修改,以改進示例數據庫的設計。
當前,始終從 product 表中讀取每種產品的價格。因此,如果更新價格,就會相應地更改以前所有訂單上該產品的銷售價格。在 sales_order_items 表中添加 unit_price 列,即可解決此問題。這樣,就可以分別存儲每個客戶的實際銷售價格。product 表中的價格記錄當前的列表價格。
啟動 PowerDesigner:
-
從 [開始] 菜單,選擇 [程序] > [SQL Anywhere 9] > [PowerDesigner 9] > [PowerDesigner]。
此時,就會出現 PowerDesigner 主窗口:
PowerDesigner 主窗口包含對象瀏覽器(左側)和輸出窗口(底部)。
-
從 [File] 菜單中選擇 [New]。
即會出現 [New] 對話框。
-
在 [New] 對話框中,選擇 [Physical Data Model],然后單擊 [OK]。
即會出現 [New Physical Data Model] 對話框。
-
在 [General] 選項卡上,從下拉列表中選擇 [Sybase AS Anywhere 9]。
-
對剩余選項使用缺省設置,然后單擊 [OK]。
此時,在瀏覽器和標題欄中就會出現模型名稱 PhysicalDataModel_1。
在本節中,可通過對示例數據庫執行反向工程,以便給其生成一個物理數據模型 (PDM)。
對數據庫執行反向工程:
-
單擊 diagram 窗口(PowerDesigner 中心的大窗格)。
-
從 [Database] 菜單中選擇 [Reverse Engineering Database]。
即會出現 [Database Reverse Engineering] 對話框:
-
確保選中了 [Using an ODBC Data Source],并且數據源是 [ASA 9.0 Sample]。
如果未出現 [ASA 9.0 Sample],請單擊數據源字段右側的圖標。此時,就會出現 [連接到 ODBC 數據源] 對話框。選擇 [計算機數據源],然后從下拉列表中選擇 [ASA 9.0 Sample]。輸入用戶 ID DBA 和口令 SQL。單擊 [連接] 以返回到 [Database Reverse Engineering] 對話框。
-
在 [Database Reverse Engineering] 對話框中,單擊 [OK]。
此時,就會出現 [ODBC Reverse Engineering] 對話框:
該對話框的下半部分有 7 個復選框,用于選擇鍵、索引等。這些都是反向工程選項。確保選中除 [Permissions] 復選框(缺省值)外的所有選項。還應確保已選中所有的表(也是缺省設置)。
-
單擊 [OK] 以進行數據庫反向工程。
示例數據庫的圖形表示將出現在圖示窗口中,模型對象將出現在瀏覽器中:
-
從 [Tools] 菜單中選擇 [Display Preferences] 以查看修改顯示的方式。單擊左側的每個選項以查看顯示首選項參數頁。單擊每頁底部的 [Help] 以查看全部信息。
查看圖示。可以使用 F6 鍵和 F7 鍵放大和縮小圖示以便于查看。
數據庫中的每個表均由一個框表示。表的名稱顯示在框的頂部。其下面是列的列表。帶有下劃線的列名是該表主鍵的一部分。每個列的數據類型顯示在右側。在反向工程后,某些表可能會發生重疊。從 [Symbol] 菜單中,選擇 [Auto-Layout] 重新對其進行排列。
這些表之間的引用是用箭頭表示的。這些箭頭指向父表,即包含主鍵的表。在每個標識引用的箭頭旁邊有一個等式。
-
重新排列這些表以便于查看圖示。若要重新排列,請用鼠標拖動這些表。引用箭頭自動隨這些表一起移動。可通過在單擊時按下 Shift 鍵來選擇多個對象。
下面就是一種可能的排列方式:
第 2 課:添加列
現在,就可以向 sales_order_items 表中添加 unit_price 列了。可通過 [Table property] 表訪問列的列表來完成此任務。
添加列:
-
選擇 sales_order_items 表。
-
從 [View] 菜單中選擇 [Properties]。
即會出現 [Table Properties] 對話框。
-
單擊 [Columns] 選項卡。
即會出現列的列表。
-
添加新列以存儲單價。
單擊 [Insert a Row] 按鈕。
此時,在行首就會出現一個箭頭,并顯示使用缺省名稱 (Column_6) 的列。
-
在名稱列中鍵入 unit_price。將此名稱自動作為代碼進行復制。
在 [Data Type] 列,從下拉列表中選擇 [Numeric]。
[Data] 字段可能因太窄而無法查看。可以拖動列的兩側以擴展列。
-
列屬性 P、F 和 M 分別表示 [主鍵]、[外鍵] 和 [強制](解釋如下):
-
選擇 [強制],然后單擊 [OK]。
-
檢查所做的更改對數據庫圖示產生的影響。
現在,sales_order_items 表包含一個稱為 unit_price 的新列。
第 3 課:檢查所做的工作
PowerDesigner 還可用于快速檢測新模型中的數據庫設計錯誤。
檢查新的模式:
-
從 [Tools] 菜單中選擇 [Check Model]。
此時,就會出現 [Check Model Parameters] 對話框。可以使用缺省參數。
-
單擊 [確定]。
此時,在 [Result List] 中就會顯示 [Check Model] 的結果。
第 4 課:保存更改并生成數據庫
在 PowerDesigner 中,將描述數據庫設計的物理組件(包括表和列)的模型稱為物理數據模型 (Physical Data Models, PDM)。PowerDesigner 將這些模型存儲在文件(擴展名為 .PDM)中。
保存物理數據模型 (PDM):
-
從 [File] 菜單中選擇 [Save As]。
-
鍵入文件名 c:\Temp\NewDemo.pdm。
-
單擊 [Save]。
可以使用 PowerDesigner 生成一個 SQL 腳本,該腳本用于實施模型的所有組件。然后,使用 SQL 腳本生成一個數據庫。
生成 SQL 腳本以新建數據庫:
-
從 [Database] 菜單中選擇 [Generate Database]。
此時,就會出現 [Database Generation] 對話框:
-
在 [Directory] 字段中鍵入 c:\Temp\,并在 [File Name] 字段中鍵入 NewDemo.sql。
-
確保選中了 [Script Generation]。
-
單擊 [Database] 選項卡,并確保選中了 [Create Database]。
瀏覽其它選項卡,以查看控制所生成腳本的許多其它屬性的選項。
-
單擊 [確定]。
創建腳本后,就會出現 [Result] 對話框。
-
單擊 [Edit] 以查看腳本。
檢查腳本中是否反映了所做的更改。例如,檢查下面顯示的新 office 表的定義。
/* ========================================= */
/* Table: office */
/* ========================================= */
create table office
(
id integer not null
default autoincrement
check (
id >= 100),
name char(15) not null,
street char(30) not null,
city char(20) not null,
state char(2) not null,
zip char(5) not null,
phone char(10) ,
fax char(10) ,
primary key (id)
);
-
完成后,關閉該對話框:在 [Result] 對話框中,單擊 [Close]。
現在,就可以從 Interactive SQL 新建數據庫了。
新建數據庫:
-
啟動 Interactive SQL。
從 [開始] 菜單中,選擇 [程序] > [SQL Anywhere 9] > [Adaptive Server Anywhere] > [Interactive SQL]。
-
使用 ASA 9.0 Sample ODBC 數據源連接到示例數據庫。
-
創建一個空數據庫:
-
關閉與示例數據庫的連接。
從 [SQL] 菜單中選擇 [斷開連接]。
-
連接到新的數據庫。
從 [SQL] 菜單中選擇 [連接]。
-
使用 read 語句。切記,此語句要求用雙引號將文件名引起來。
可以使用這些基本步驟來修改其它數據庫。
小結
此教程僅介紹 PowerDesigner 的一些基本特性。實際上,它可以處理數據庫模式的全部設計或修改,其中包括所有的表、視圖、索引、引用、觸發器和過程。
可以使用其它特性大大簡化大型數據庫的設計任務。例如,可以指定域。域包含特定類型的數據,例如電話號碼。域與某種數據類型關聯,但域更具體一些。例如,可以創建標識號域。當需要表中的某個標識號時,可以將該列與標識號域關聯起來。同時,自動關聯所有與該域關聯的屬性和檢查。
域可減少重復性的定義。這樣,不僅減少了您的工作量,而且還降低了誤用其它類型定義或檢查過程的可能性。不應簡單地將列標識為一個整數,而是指定該列包含的具體數據類型。該數據類型的所有實例共享相同的定義。
有關詳細信息,請參見使用域。
業務規則以書面的形式來表達業務運營的方式。例如,the order shipped date must be greater than or equal to the order date(訂單交貨日期必須晚于或等于訂單日期)就是一條業務規則。
業務規則共分為四個類別:
業務規則的使用很方便,因為它們與客戶要求數據庫執行的任務直接相關。通過記錄業務規則并將它們與特定對象關聯起來,可以確保數據庫執行所需的任務。