软件设计之 数据库设计
首先要搞清楚容易混淆的兩個概念:“數據庫系統”和“應用軟件的數據庫”。
數據庫系統是指數據庫廠商提供的數據庫服務器,目前著名的大型數據庫系統有Oracle、DB2、Informix、Sybase,中型數據庫系統如Microsoft SQL Server。
而應用軟件的數據庫則是指開發者在數據庫系統中創建的庫,用于存儲應用軟件的數據。一般地,人們可以從上下文判斷“數據庫”究竟是指哪一個?
簡而言之,數據庫是存儲和處理數據用的。數據庫設計的主要工作是:
(1)設計數據庫的表(數據就存在表里面),表的結構就是數據的存儲結構。
(2)對這些表中的數據進行操作,常見操作如查詢、插入、修改、刪除等。
數據庫設計的難易程度取決于兩個要素:“數據關系的復雜程度”和“數據量的大小”。如果應用軟件只涉及幾張簡單的表,并且數據量特別小,那么設計這樣的數據庫就非常容易(例如設計一個班級的學生成績單數據庫)。但是你絕對不能盲目樂觀:以為所有的數據庫設計都是那么簡單。
?-- 汝州有個地主,非常富有,但幾代人都不識字。
??? 一年,他請一位先生教兒子認字。先生先教他兒子握筆臨帖,寫了
??? 一劃,說:“這是‘一’字。”寫兩劃,說:“這是‘二’字?!?/font>
??? 寫三劃,又說:“這是‘三’字?!?/font>
??? 那孩子便喜孜孜地甩下筆,告訴父親說:“孩兒全會了,孩兒全會
??? 了。不要再麻煩先生,多花學費了,把他辭退吧?!?/font>
????地主高興地照辦。
??? 不久,地主打算宴請一位姓萬的朋友,就讓兒子寫請柬??墒沁^了
??? 好長時間,也不見他
????寫完,便去催促。誰知孩子氣憤地叫道:“天下的姓那么多,為啥
??? 要姓萬!苦得我從早晨寫到現在,才寫完500劃!”
?-- 軟件開發人員學習數據庫設計的特點是:入門很容易,但是成為高手非常難。大家千萬不要學萬公子寫字噢。?
◆.數據庫設計的主要困難與對策
一、開發與平臺無關的數據庫應用程序
目前國際上應用最廣泛的數據庫系統有Oracle、DB2、Informix、Sybase和SQL Server。這些數據庫系統之間的激烈競爭即有好處又有壞處。競爭的好處是使數據庫系統不斷發展和完善,并且避免價格壟斷。競爭的最大壞處是逼迫數據庫廠商不斷開發出獨特的功能以吸引更多的用戶,所以各個數據庫系統的獨特功能無法形成統一標準,導致用戶難以開發出與平臺無關的數據庫應用程序,因為用戶很難抵御數據庫系統獨特功能的誘惑。
SQL是數據庫系統的標準查詢語言??墒菙祿鞆S商提供了太多超出SQL標準的特色功能,使人們陷入了進退兩難的境地:(1)如果你想使程序與數據庫平臺無
關,那么只能使用SQL,放棄各個數據庫系統的獨特功能。(2)如果你超越SQL,使用了某個數據庫系統的獨特功能,那么這樣的程序就是與平臺相關的。類似問題也存在于操作系統、Web瀏覽器這些領域。理論上講,只有絕對壟斷才能形成絕對統一的標準,但是人們既希望打破壟斷又希望有統一的標準,這種矛盾無法徹底解決,只能折衷、妥協。
如果你開發的是通用的數據庫應用軟件,不想讓應用軟件與特定的數據庫系統捆綁在一起,那么你就老老實實地用SQL語言寫程序。
如果你開發的是行業專用的數據庫應用軟件,并且這個行業已經指定了數據庫系統(這種局部壟斷現象普遍存在),最近若干年都不會改變的話,那么你可以超越SQL使用該數據庫系統的獨特功能。(例如公安部采用Oracle,銀行采用Informix)
二、數據庫性能優化問題
數據庫設計的主要挑戰是“高速處理大容量的數據”。如何優化數據庫的性能是設計人員經常面臨的問題。數據庫性能優化主要有兩種途徑:“優化表結構本身”和“優化數據庫的環境參數”。這是筆者尚不清晰的地方,還需要更多的時間學習和實踐!
三、數據庫設計流程
數據庫設計一般要經歷“邏輯設計—>物理設計->安全性設計->性能優化”等步驟,通常要迭代進行。
[最后:其實,要學習和認識還有許多,學習是首要的 ... 2007年7月23日 晚]
◆.數據庫性能優化問題
-- 數據庫設計的主要挑戰是“高速處理大容量的數據”。如何優化數據庫的性能是設計人員經常面臨的問題。數據庫性能優化主要有兩種途徑:“優化表結構本身”和“優化數據庫的環境參數”。
-- 在表的物理設計階段,設計人員應當按照第三范式設計表結構(即規范化處理)。這樣做的好處是:表中沒有冗余數據,表結構很清晰,將來修改或者擴充非常方便。但是按第三范式設計也存在一些缺點:產生了許多表,每個表有相對較少的列,并且這些列必須使用“主健/外健”關聯起來,因此某個查詢操作可能會產生復雜的表鏈接,導致性能降低。
-- 反規范化處理是指對第三范式的表進行修改,通過合并一些表,或者在表中創建冗余的列,從而減少表鏈接操作代價,達到提高性能的目的。要注意的是反規范化處理存在很大的負面影響:管理冗余數據很麻煩,如果冗余數據不同步的話,那么會發生數據錯誤這種嚴重的問題。
-- 對表進行第三范式的規范化處理是第一重要的,而反規范化處理則需謹慎考慮、不宜過多使用。“規范化處理”以及“反規范化處理”不是自相矛盾之舉,而是性能優化的策略。
-- 除了優化表結構之外,優化數據庫的環境參數也能夠提高數據庫的性能。例如給服務器配置更快的CPU,增加內存。運行數據庫是非常消耗內存的,內存對數據庫性能影響比較大。由于現在市場上的內存條越來越便宜,所以為服務器配置足夠多的內存恐怕是成本最低、難度最低、見效最快的性能優化方法。
-- 能否有效地優化應用軟件數據庫的性能,主要取決于開發者對數據庫系統的熟悉程度以及開發經驗。
轉載于:https://www.cnblogs.com/Dlonghow/archive/2007/12/20/1007367.html
總結
以上是生活随笔為你收集整理的软件设计之 数据库设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【找一本书】万能的天涯涯友,帮我找找一本
- 下一篇: sql server 2005 T-SQ