PowerDesigner設計數據庫

PowerDesigner設計數據庫
                                                           
李偉華 2000年9月
 
   說明:此文檔爲本人經驗積累之所得,非部門設
計文檔(版權所有)
 
 本文檔不講述如何使用PowerDesigner,而是講述如何將
PowerDesigner的特點結合數據庫設計的方法更好的設計一個數據庫
系統。
採用PowerDesigner設計數據庫
   PowerDesigner作爲數據庫建模和設計的CASE工具之一,在數
據庫系統開發中發揮着重要作用。
   運用PowerDesigner進行數據庫設計,不但給人直觀地理解模
型,而且充分運用數據庫的技術,優化數據庫的設計。PowerDesigner
支持Sybase、Oracle、Informix、SQL Server等多種數據庫系統,在
應用系統做數據庫遷移時不必維護多個數據庫腳本。
   對於採用結構化分析(SA),E-R圖、數據流圖直至最後的數據
庫物理圖都是系統設計時不可缺少的一個部分,當數據庫物理圖完成
後,應該產生系統的數據字典。運用PowerDesigner完全能夠完成這
一設計流程。
   對於採用面向對象的分析(OOA),由於數據庫採用的是RDBMS,
因此存在對象和關係數據庫之間的映射,也需要進行數據庫設計。
兩種數據庫模型
   PowerDesigner可以設計兩種數據庫模型圖:數據庫邏輯圖(即
E-R圖或概念模型)和數據庫物理圖(物理模型),並且這兩種數據庫
圖是互逆的。
   數據庫邏輯圖是對現實世界的一種抽象,體現實體之間的關係,
可以有1對1、1對多、多對多等關係。特別說一點,在擴充E-R圖中
有概括這種關係,體現類型之間的一種子集聯繫,它定義了超類和子
類。在PowerDesigner設計的E-R圖中,不具備這種關係,但在E-RWin
設計的模型中支持這種關係,因此在用E-RWin圖設計的模型轉化爲
PowerDesigner的模型時注意這種關係。
   數據庫物理圖中是邏輯模型的物理實現,體現了表間的參照關
系。在物理模型中不可能存在多對多的關係。在邏輯圖向物理圖轉換
時,多對多的關係變成兩個1對多的關係。
 邏輯模型和物理模型有着緊密的聯繫,也有本質的區別。邏輯模型
的設計遵循數據庫設計理論的第三範式(在一般的數據庫應用達到第
三範式即可),邏輯模型要求具有應用系統所表達的所有信息並消除
數據冗餘。物理模型是在邏輯模型的基礎上,爲了優化應用系統的性
能而採用增加冗餘,創建索引等數據庫技術,它主要用非規範化的一
些理論。
 在考慮設計的任何非規範化之前,數據庫應先完全規範化,在沒有
完全理解數據和用戶需求之前,不能進行非規範化。否則導致數據的
組織越來越混亂,應用程序越來越複雜。
 因此邏輯模型和物理模型是相互矛盾又緊密聯繫的,這點需要設計
人員好好把握。
PowerDesigner設計數據庫物理圖
用PowerDesigner設計數據庫物理圖,包括多個對象,如表(Table)、
字段(Column)、域(Domain)等。設計時主要在PowerDesigner的
Dictionary和Database兩個菜單中。
表(Table)
 表是數據存儲的一個邏輯對象,包括其它對象如字段(Column)、
索引(Index)、觸發器(Trigger)、存儲過程(Procedure)等,表
的優化設計有分割等技術,對於表的存儲,如果訪問數據量大,訪問
頻率高則可考慮將表放在不同的存儲(Storage)上。
 在設計表時,應該估算表的大小和增長量,便於創建數據庫時分配
數據庫空鍵,這樣減少了磁盤碎片的產生。
 在關係數據庫中設計主鍵時,採用有意義的主鍵是致命的錯誤。如
果用戶決定改變字段的商業含義,則需要在所有使用到該信息的地方
進行修改。主鍵的作用應是保持唯一性和作爲外鍵使用。任何對主鍵
的修改會導致巨大的數據庫維護工作量,顯然這是不合適宜的設計。
就關係數據庫而言,設計主鍵策略採用的是代理主鍵的方法。
 設計主鍵時應該避免“熱點”現象,但也需要分析具體的應用系統
的併發用戶而定。
字段(Column)
 定義一個字段主要有字段名、字段類型及長度、是否主外鍵、是否
空、約束、默認值、域等。
 變長和定長的數據類型在數據庫設計中討論比較多,作爲一般原
則,如果預期某列中的數據範圍變化很大,但變化並不頻繁,那末對
這樣的列使用變長數據類型最爲適宜。
 決定行長時,既不能太浪費,又不能太吝惜。考慮到將來的需要,
並且意識到,如果增加行長而沒有改變一頁中容納的行數,那末增加
的空間就等於免費使用。
 設計時,字段儘量使用域,方便維護字段的類型。每個字段最好將
默認值加上,因爲在數據庫查詢中,有NULL值會影響查詢的性能。
 通過CHECK約束可限制字段的取值。
域(Domain)
   簡單地說,是用戶自定義類型,但域還可以定義它的取值範圍
或默認值,採用域減少了維護字段類型的工作量,也減少數據的不一
致性。
參照(Reference)
   參照在數據庫設計中是一個比較複雜的問題,它是實現數據的
完整性主要要素之一,詳細論述參考後面數據的約束。
   在PowerDesigner中,可對參照完整性進行各項設置,參照的
基數從0到n,對修改和刪除約束可分別設置爲None、Restrict、
Cascade、Set Null、Set Default。由於INSERT包含在UPDATE操作
中,因此沒有單獨的INSERT約束。
   約束的不同設置產生不同的效果,以修改爲例(刪除相同):
None:父表修改,子表不影響。
Restrict:父表修改,如果子表存在,則出錯。
Cascade:父表修改,如果子表存在,則相應的修改。
Set Null:父表修改,如果子表存在,則相應置空。
Set Default:父表修改,如果子表存在,則相應置默認值。
索引(Index)
 索引是優化查詢時採用一種數據庫技術,索引有簇索引、非簇索引、
唯一索引等。
 設計索引時,要注意索引寬度,儘量減少索引的寬度。索引的寬度
不是由字段的多少決定的,而是由字段的長度來決定。對於窄索引關
鍵字,在每一索引頁上放置更多的關鍵字和指針,這樣就能花銷更少
的I/O找到數據。
 對於複合索引,選擇首列相當重要,否則可能不能利用該索引,當
利用複合索引查詢時。必須確保查詢從首列開始。
 索引還有一個填充因子(FillFactor),填充因子的大小視表的數
據增長量和主鍵定義的情況而定。
觸發器和存儲過程(Trigger&&Procedure)
 觸發器在維護數據完整性起着重要作用,它比參照更具靈活性,
也能實現三層結構中數據層的業務規則。
 存儲過程是採用SQL及流程控制語句編寫的完成某種業務的腳本。
存儲過程在數據處理上具有處理速度快、處理靈活等優點。
   但是,存儲過程極大地增加了與數據庫之間的耦合,在數據庫
遷移時,需要重寫存儲過程,從而增加了版本維護的工作量。如果數
據庫要求從遷移性考慮,應儘量避免使用存儲過程或者觸發器。
 如果不人爲修改PowerDesigner的觸發器,其遷移性
PowerDesigner自動解決。
存儲(Storage)
   不同的數據庫中有不同的概念,Sybase稱爲設備(Device),
SQL Server稱爲文件或文件組(File、FileGroup),而Oracle稱爲表
空間(TableSpace)。
   根據系統創建一個或多個存儲,按一定的優化規則存放。
數據庫的劃分
 數據庫的劃分以它的物理分佈爲原則,而不應數據量、表類型等原
則來劃分,數據庫的多少對數據庫的性能影響不大。對於訪問數據量
大、訪問頻繁的表來說,I/O操作很容易形成嚴重的瓶頸,因此減少
I/O操作和I/O操作阻塞是數據庫設計考慮的主要問題,解決方法將將
表放在多個設備上,設備需創建在不同的物理驅動器上,最好能用智
能型或陣列。
 日誌和數據分開存儲在不同設備上,如果索引多且佔用空間大,也
可以採用如此方式。
 數據庫數量少的維護成本比數量大少。
 因此數據庫劃分以物理分佈爲原則。
 在PowerDesigner提供計算數據庫或表的方法(Compute Database
Size),可幫助設計者完成數據庫的劃分。
數據庫的完整性
 數據庫完整性可通過存儲過程、聲明性參照完整性(DRI)、
數據類型、約束、規則、默認值,以及觸發器來實現。在數據庫內,
這些功能各以特有的方式發揮作用。綜合利用這些完整性功能,可以
使數據庫靈活,易於管理,而且很安全。
   數據完整性概念分爲幾個方面。
◆  表域完整性
   通過主鍵來強制表的域完整性。
◆  引用完整性
   利用參照來加強表之間的邏輯關係。
◆  數值域完整性
   任何輸入的數據在類型和範圍上必須與指定的數據類型相匹
配,只有當某列被說明允許NULL值,才允許向該列輸入NULL。
數據庫的性能測試
 生成數據庫之後,應進行數據庫性能測試,以便優化數據庫的設計,
因此需要生成測試數據,由於是性能測試,數據的規範性要求不高。
通過PowerDesigner可方便地生成測試數據(Generate Test Data),
完成性能測試。
數據的約束
O-O約束
   對父表的INSERT、UPDATE、DELETE操作沒有限制。
M-O約束
   對父表操作的約束:
   父表的INSERT操作,對M-O約束,父表中間的記錄可以沒有任
何約束地添加到表中,因爲這種約束中不一定必須有子女。
 父表的鍵值修改操作,只有在子表中其所有的子女對應均做修改
後,才能修改,即一般採用級聯更新的方法。
 父表的刪除,父親只有在其所有子女均被刪除或重新分配之後該父
親才能被刪除。
強制對可選(M-O)約束O-M約束
 父表操作的約束:
   父表的INSERT操作,對O-M約束,一個父親只有當至少當它的
一個、子女同時被加入或至少存在一個合法的子女時,才能被加入。
   父表的鍵值修改操作,只有當一個子女被創建或已經有一名子
女存在才行。
   父表的刪除,理論上刪除父親是沒有限制的,實際上,刪除主
表記錄時,不採用級聯刪除子表的方案,而採用將子表的外鍵置空。
   可選對強制(O-M)約束
 
M-M約束
父表操作的約束:
   父表的INSERT操作,可能隨後需要生成子女,即在子表中創建
新的行。也可能通過對子表的重新分配來實施完整行限制。
   父表的鍵值修改操作,只有在子表對應的外鍵的值修改成新值
時才能進行。實際可能是先創建新的父表紀錄,接着修改子表所有對
應的紀錄,使其與父表的新紀錄關聯,最後刪除原父表紀錄。
   父表的刪除,只有在子表中所有相關的行全部刪除或重新分配
之後,才能刪除父表中的紀錄,一般對子表也進行刪除操作。
   強制對強制(M-M)約束
   
   在四類約束:M-M、M-O、O-M、O-O。鍵值的修改可能會改變表
之間的關係,而且可能違反一些約束。違反約束的操作是不允許的。
具體的應用必須根據實際的要求和商業規則進行適當的選擇。但在設
計和開發時,必須考慮所分析的約束。
物理圖的組織
   數據庫物理的組織以功能來組織爲好,讓人很容易就明白該功
能需要操作哪些表,數據是如何流向的,但是按此組織,可能有些參
照建立比較亂,其實有些參照可以不必建立,如在寫入一個表時,其
數據的來源就是從另一個查詢得到的,可以保證數據的正確性,從功
能劃分來組織物理圖,就可以不建立這個參照。
數據庫的生成
   有了數據庫物理圖,在生成數據庫或數據庫腳本時,應注意如
下的問題:
   參照完整性的實現,可以採用聲明性參照實現或觸發器實現,
至於兩種實現的優缺點,前面已經論述過,這裏僅說一點,如果採用
觸發器實現需要在生成數據庫後再生成觸發器。
   當參照含有級聯(Cascade)刪除或修改時,其實現要分情況處
理:
   Sybase、SQL Server不支持聲明性級聯(Cascade)刪除或修改,
只能通過觸發器(Trigger)來實現。
   Oracle、Informix支持聲明性級聯(Cascade)刪除,但不支持
級聯(Cascade)修改,也只能通過觸發器(Trigger)來實現。
 當定義了用戶自定義類型時,在生成數據庫時,最好轉換成數據庫
基本類型,對數據庫性能和遷移都有利。
數據字典
 數據字典作爲產品的一個歸檔文檔,它定義應用系統數據庫的各個
方面。數據庫物理模型建好後,就可以生成數據字典,數據字典的內
容和形式可以在PowerDesigner定義模板,依據模板生成數據字典,
再處理一下文檔格式。
 在PowerDesigner用Create Report生成數據字典。
目前系統需要處理和優化的地方
   主鍵的定義:
   由於對業務瞭解的深度不夠,某些表的主鍵建立存在一些問題,
隨着業務的深入逐步完善。
 參照的建立:
   主鍵的定義不完善導致了參照建立的不完善,這也只能以後組
不完善。
 數據庫的劃分:
 數據庫的劃分前面已經談過,由於這個劃分影響着服務器和客戶端
的程序,也只能以後的新版中解決。
 表結構的調整:
 對於有些表,如系統設置表,可以將它的橫向結構改爲縱向結構,
這樣增加了系統的靈活性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章