程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 如何使用ERWin設計數據庫

如何使用ERWin設計數據庫

編輯:Oracle數據庫基礎
 

本文作者結合自己多年的實踐經驗,系統闡述了利用ERWin進行數據庫建模的思想、方法和注意事項,具有一定實用價值。

ERWin Data Modeler是CA公司的數據庫建模工具,目前在關系數據庫的設計中,有著比較廣泛的應用。筆者經過多年的實踐,感覺使用ERWin設計數據庫,上手還是比較快的,但是要在項目中使用好,對於不同的開發環境和不同的項目,在開發的不同階段使用ERWin,可能采取的最佳策略也不相同。

使用前的准備

1.學習ERWin支持的方法論

ERWin支持兩種方法論,一種是IE(信息工程),另一種是IDEF1X,在使用ERWin之前必須了解其一,不然,將連標記符號也搞不清楚。這裡筆者簡單談一下IDEF1X(詳細內容在ERWin的聯機文檔中有介紹)。IDEF1X為數據模型提供了一種規范的結構,是語義模型化技術,主要描述的對象包括實體、聯系和屬性。同時,作為一種工業規范,IDEF1X還強調了對開發上述模型需要的方法。這樣,標准化的標記語言和相關的輔助方法論組合在一起,就可以充分保證設計的高效率和有效性的平衡了。

2.學習ERWin

掌握了ERWin支持的方法論,並不等於掌握了ERWin,方法論僅僅解決的是邏輯模型,而ERWin還要支持物理模型,還有界面和操作的問題。由於在生成數據庫的過程中,需要對於使用的物理數據庫有比較多的了解,所以還一定要了解IDEF1X和目標關系數據庫之間的差異,這種差異,可能對於微機平台、小數據量的應用關系不大,但是對於大型數據庫,還是有很多物理的參數、限制等應該了解。

4.確定數據庫表、字段的命名規則

確定數據庫表、字段的命名規則,看似容易,其實涉及到的方面很多,而且初始階段一旦沒有處理好,以後再改難度比較大。筆者認為,命名宜考慮如下因素:

● 如果新開發的系統是一個大系統的子系統,那麼應該考慮原來大系統的數據庫、字段命名的規則,即使這樣的規則存在問題,也要在取得共識的基礎上進行改進。

● 考慮開發和運行工具的限制要求,以及生產系統的限制要求。

● 在可能的情況下,應考慮匈牙利命名法。對於應用系統,往往對於數據是有分類的,如果能夠把這些分類體現在數據庫表名和字段名中,則是有益無害的。

● 字段名保持惟一能夠避免一些不小心導致的對數據庫字段的使用錯誤。

5.對數據庫表進行分類

對於數據庫表進行分類,能夠使數據庫更加清晰,也便於系統管理。根據筆者的體會,對於每一類數據庫表,如果允許,可以按照匈牙利命名法的規則規定一個特征標記,可以是前綴也可以是後綴。

建立數據庫的邏輯模型

ERWin作為一個建模工具,引進了一些概念和工具,這些概念和工具往往貫穿於邏輯模型和物理模型中。但是這些方面如果在邏輯模型中處理不好,到了物理模型的階段也往往木已成舟,沒有辦法了。

1.用好Domain

Domain的概念有點像是屬性的數據類型,筆者的體會是,如果不打算使用Domain,則不要增加任何Domain,都用ERWin提供的默認值; 如果打算使用Domain,則應該對於每一類數據等同的屬性建立一個Domain,而且在修改數據類型的時候,僅僅修改Domain中的內容。總體來看,使用Domain雖然可能增加一些工作量,但是可以建立所有屬性數據類型的定義樹。

2. 用好Definition

Definition和Domain不同,不是一個可操作的實體,而是在每一個Domain,每一個實體和屬性中的一個標簽。在Domain、實體和屬性的建立和修改過程中,正確地維護Definition,是能夠隨時得到文本數據結構說明的一種有效的方法。

3. 處理好鍵值組命名

采用自己方便和清晰、又能為實現環境所接受的鍵值組命名。其中,對於主鍵、次鍵、外鍵和單獨建立的可重復索引,應該進行區分,因為對銀行等行業的多應用交互的大型、復雜的運行環境,如果不加以關注,可能在投產後的系統管理中造成很多麻煩。實際上,ERWin對於上述的鍵名稱和索引,在命名的時候是有所區分的,應該充分利用這種區分,在滿足環境的情況下,可以直接使用ERWin給出的命名。

對於外鍵的命名,在邏輯模型中,體現為關系的命名。ERWin默認的做法是用一個內部連續的編號,這樣可以做到保證命名的惟一,但是並不清晰。在實際工作中,筆者發現,父實體對於子實體往往是包含關系,尤其是對於代碼類的父實體,更是如此。因此,筆者采用了“子實體3父實體”的方式,其中“子實體”和“父實體”都可以是實體名稱的縮寫,而“3”的意義是借用了其字形比較像數學中的屬於符號的含義。這樣,實際上是對IDEF1X一種變形的應用,這個短句包括父實體、動詞和子實體,而動詞永遠是“屬於”。

4. 充分利用Subject

對於大型的應用,可以用Subject來關注某些方面的內容。可以僅僅將感興趣的實體放入Subject中進行處理,而且還可以按照Subject來產生建表的腳本。對於圖形布局來說,各個Subject是相互獨立的。筆者在以下的兩種情況下經常使用Subject:

● 從業務邏輯分析問題的時候。對於某一個角度,可能往往僅僅涉及到部分表,為了充分利用圖形來描述實體間的關系,將這些相關的實體放入一個Subject中,然後用手工進行圖形的布局。

● 對於工作表和歷史數據表,往往具有基本相同的數據結構,但是歷史數據表還要增加一些歷史紀錄信息。一般不論是由ERWin自動進行版面布局還是自己根據需要進行的版面布局,很難將工作表和歷史數據表放在一起,而在修改時,這兩個表最好是一起修改,不然如果出現不一致的問題就相當麻煩了。

5. 謹慎使用參照完整性

在關系數據庫中,提供了參照完整性的概念,利用好參照完整性,可以保持應用數據的高度一致性,但一定要謹慎使用。一般來說,實現參照完整性有三種方法,第一種是使用數據庫的觸發器; 第二種是使用數據庫的外鍵; 第三種是使用應用邏輯。

對於使用數據庫的觸發器,這種方法有著最大的靈活性。觸發器是由數據庫的引擎控制的,只要數據庫的引擎不出問題,那麼觸發器就總是有效的,除非人工關閉觸發器,否則數據的一致性可以得到最大的保證。但是這樣也會引入兩個問題: 對於數據的修改沒有痕跡,如果是誤操作,那後果是不堪設想的; 對於一些聯機交易系統,所有的交易必須快速響應,如果采用這樣的觸發器,系統的響應時間就會變得太長。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved