數據庫設計

                                                                              數據庫設計

第 1 部分 - 設計數據庫之前
1. 考察現有環境
在設計一個新數據庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數數據庫項目都不是從頭開始建立的;通常,機構內總會存在用來滿足特定需求的現有系統(可能沒有實現自動計算)。顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究可以讓你發現一些可能會忽略的細微問題。一般來說,考察現有系統對你絕對有好處。
2. 定義標準的對象命名規範
一定要定義數據庫對象的命名規範。對數據庫表來說,從項目一開始就要確定表名是採用複數還是單數形式。此外還要給表的別名定義簡單規則(比方說,如果表名是一個單詞,別名就取單詞的前 4 個字母;如果表名是兩個單詞,就各取兩個單詞的前兩個字母組成 4 個字母長的別名;如果表的名字由 3 個單詞組成,你不妨從頭兩個單詞中各取一個然後從最後一個單詞中再取出兩個字母,結果還是組成 4 字母長的別名,其餘依次類推)對工作用表來說,表名可以加上前綴 WORK_ 後面附上採用該表的應用程序的名字。表內的列[字段]要針對鍵採用一整套設計規則。比如,如果鍵是數字類型,你可以用 _N 作爲後綴;如果是字符類型則可以採用 _C 後綴。對列[字段]名應該採用標準的前綴和後綴。再如,假如你的表裏有好多“money”字段,你不妨給每個列[字段]增加一個 _M 後綴。還有,日期列[字段]最好以 D_ 作爲名字打頭。
檢查表名、報表名和查詢名之間的命名規範。你可能會很快就被這些不同的數據庫要素的名稱搞糊塗了。假如你堅持統一地命名這些數據庫的不同組成部分,至少你應該在這些對象名字的開頭用 Table、Query 或者 Report 等前綴加以區別。
如果採用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符號來標識對象(比如 tbl_Employees)。我在和 SQL Server 打交道的時候還用過 tbl 來索引表,但我用 sp_company (現在用 sp_feft_)標識存儲過程,因爲在有的時候如果我發現了更好的處理辦法往往會保存好幾個拷貝。我在實現 SQL Server 2000 時用 udf_ (或者類似的標記)標識我編寫的函數。
3. 工欲利其器
採用理想的數據庫設計工具,比如:SyBase 公司的 PowerDesign,她支持 PB、VB、Delphe 等語言,通過 ODBC 可以連接市面上流行的 30 多個數據庫,包括 dBase、FoxPro、VFP、SQL Server 等,今後有機會我將着重介紹 PowerDesign 的使用。
4. 獲取數據模式資源手冊
正在尋求示例模式的人可以閱讀《數據模式資源手冊》一書,該書由 Len Silverston、W. H. Inmon 和 Kent Graziano 編寫,是一本值得擁有的最佳數據建模圖書。該書包括的章節涵蓋多種數據領域,比如人員、機構和工作效能等。其他的你還可以參考:[1]薩師煊 王珊著 數據庫系統概論(第二版)高等教育出版社 1991、[2][美] Steven M.Bobrowski 著 Oracle 7 與客戶/服務器計算技術從入門到精通 劉建元等譯 電子工業出版社,1996、[3]週中元 信息系統建模方法(下) 電子與信息化 1999年第3期,1999
5. 暢想未來,但不可忘了過去的教訓
我發現詢問用戶如何看待未來需求變化非常有用。這樣做可以達到兩個目的:首先,你可以清楚地瞭解應用設計在哪個地方應該更具靈活性以及如何避免性能瓶頸;其次,你知道發生事先沒有確定的需求變更時用戶將和你一樣感到吃驚。
一定要記住過去的經驗教訓!我們開發人員還應該通過分享自己的體會和經驗互相幫助。即使用戶認爲他們再也不需要什麼支持了,我們也應該對他們進行這方面的教育,我們都曾經面臨過這樣的時刻“當初要是這麼做了該多好..”。
6. 在物理實踐之前進行邏輯設計
在深入物理設計之前要先進行邏輯設計。隨着大量的 CASE 工具不斷涌現出來,你的設計也可以達到相當高的邏輯水準,你通常可以從整體上更好地瞭解數據庫設計所需要的方方面面。
7. 瞭解你的業務
在你百分百地確定系統從客戶角度滿足其需求之前不要在你的 ER(實體關係)模式中加入哪怕一個數據表(怎麼,你還沒有模式?那請你參看技巧 9)。瞭解你的企業業務可以在以後的開發階段節約大量的時間。一旦你明確了業務需求,你就可以自己做出許多決策了。
一旦你認爲你已經明確了業務內容,你最好同客戶進行一次系統的交流。採用客戶的術語並且向他們解釋你所想到的和你所聽到的。同時還應該用可能、將會和必須等詞彙表達出系統的關係基數。這樣你就可以讓你的客戶糾正你自己的理解然後做好下一步的 ER 設計。
8. 創建數據字典和 ER 圖表
一定要花點時間創建 ER 圖表和數據字典。其中至少應該包含每個字段的數據類型和在每個表內的主外鍵。創建 ER 圖表和數據字典確實有點費時但對其他開發人員要了解整個設計卻是完全必要的。越早創建越能有助於避免今後面臨的可能混亂,從而可以讓任何瞭解數據庫的人都明確如何從數據庫中獲得數據。
有一份諸如 ER 圖表等最新文檔其重要性如何強調都不過分,這對錶明表之間關係很有用,而數據字典則說明了每個字段的用途以及任何可能存在的別名。對 SQL 表達式的文檔化來說這是完全必要的。
9. 創建模式
一張圖表勝過千言萬語:開發人員不僅要閱讀和實現它,而且還要用它來幫助自己和用戶對話。模式有助於提高協作效能,這樣在先期的數據庫設計中幾乎不可能出現大的問題。模式不必弄的很複雜;甚至可以簡單到手寫在一張紙上就可以了。只是要保證其上的邏輯關係今後能產生效益。
10. 從輸入輸出下手
在定義數據庫表和字段需求(輸入)時,首先應檢查現有的或者已經設計出的報表、查詢和視圖(輸出)以決定爲了支持這些輸出哪些是必要的表和字段。舉個簡單的例子:假如客戶需要一個報表按照郵政編碼排序、分段和求和,你要保證其中包括了單獨的郵政編碼字段而不要把郵政編碼糅進地址字段裏。
11. 報表技巧
要了解用戶通常是如何報告數據的:批處理還是在線提交報表?時間間隔是每天、每週、每月、每個季度還是每年?如果需要的話還可以考慮創建總結表。系統生成的主鍵在報表中很難管理。用戶在具有系統生成主鍵的表內用副鍵進行檢索往往會返回許多重複數據。這樣的檢索性能比較低而且容易引起混亂。
12. 理解客戶需求
看起來這應該是顯而易見的事,但需求就是來自客戶(這裏要從內部和外部客戶的角度考慮)。不要依賴用戶寫下來的需求,真正的需求在客戶的腦袋裏。你要讓客戶解釋其需求,而且隨着開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。一個不變的真理是:“只有我看見了我才知道我想要的是什麼”必然會導致大量的返工,因爲數據庫沒有達到客戶從來沒有寫下來的需求標準。而更糟的是你對他們需求的解釋只屬於你自己,而且可能是完全錯誤的。

發佈了10 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章