我們日常生活中只聽說過數據庫,但是對于數據庫設計卻很少有人知道。那么軟件設計中的數據庫設計是什么?數據庫設計很重要,因為它對于構建可在高工作負載下運行的可伸縮軟件應用程序至關重要。設計數據庫首先,選擇數據庫軟件至關重要。當前,有數百種數據庫軟件可用于構建應用程序。我們可以從一些好的免費數據庫軟件中進行選擇,然后我們可以設計一個滿足要求的數據庫。
● 開發與平臺無關的數據庫應用程序
目前國際上應用最廣泛的數據庫系統有Oracle、DB2、Informix、Sybase和SQL Server。
這些數據庫系統之間的激烈競爭即有好處又有壞處。競爭的好處是使數據庫系統不斷發展和完善,并且避免價格壟斷。競爭的最大壞處是逼迫數據庫廠商不斷開發出獨特的功能以吸引更多的用戶,所以各個數據庫系統的獨特功能無法形成統一標準,導致用戶難以開發出與平臺無關的數據庫應用程序,因為用戶很難抵御數據庫系統獨特功能的誘惑。
也許有人會問:“結構化查詢語言(SQL)難道不是數據庫系統的標準嗎?”
是的,SQL是數據庫系統的標準查詢語言。可是數據庫廠商提供了太多超出SQL標準的特色功能,使人們陷入了進退兩難的境地:
如果你想使程序與數據庫平臺無關,那么只能使用SQL,放棄各個數據庫系統的獨特功能。
如果你超越SQL,使用了某個數據庫系統的獨特功能,那么這樣的程序就是與平臺相關的。
類似問題也存在于操作系統、Web瀏覽器這些領域。理論上講,只有絕對壟斷才能形成絕對統一的標準,但是人們既希望打破壟斷又希望有統一的標準,這種矛盾無法徹底解決,只能折衷、妥協。建議如下:
如果你開發的是通用的數據庫應用軟件,不想讓應用軟件與特定的數據庫系統捆綁在一起,那么你就老老實實地用SQL語言寫程序。
如果你開發的是行業專用的數據庫應用軟件,并且這個行業已經指定了數據庫系統(這種局部壟斷現象普遍存在),最近若干年都不會改變的話,那么你可以超越SQL使用該數據庫系統的獨特功能。
● 數據庫性能優化問題
數據庫設計的主要挑戰是“高速處理大容量的數據”。如何優化數據庫的性能是設計人員經常面臨的問題。數據庫性能優化主要有兩種途徑:
優化表結構本身。例如對第三范式的表結構進行反規范化處理,允許表中存在冗余數據,從而減少多個表鏈接操作,達到提高性能的目的。
優化數據庫的環境參數。例如提高硬件設施,調整表的空間盡量減少數據碎片等。
在表的物理設計階段,設計人員應當按照第三范式設計表結構(即規范化處理)。這樣做的好處是:表中沒有冗余數據,表結構很清晰,將來修改或者擴充非常方便。但是按第三范式設計也存在一些缺點:產生了許多表,每個表有相對較少的列,并且這些列必須使用“主健/外健”關聯起來,因此某個查詢操作可能會產生復雜的表鏈接,導致性能降低。
反規范化處理是指對第三范式的表進行修改,通過合并一些表,或者在表中創建冗余的列,從而減少表鏈接操作代價,達到提高性能的目的。要注意的是反規范化處理存在很大的負面影響:管理冗余數據很麻煩,如果冗余數據不同步的話,那么會發生數據錯誤這種嚴重的問題。
所以,對表進行第三范式的規范化處理是第一重要的,而反規范化處理則需謹慎考慮、不宜過多使用。“規范化處理”以及“反規范化處理”不是自相矛盾之舉,而是性能優化的策略。
除了優化表結構之外,優化數據庫的環境參數也能夠提高數據庫的性能。例如給服務器配置更快的CPU,增加內存。運行數據庫是非常消耗內存的,內存對數據庫性能影響比較大。由于現在市場上的內存條越來越便宜,所以為服務器配置足夠多的內存恐怕是成本最低、難度最低、見效最快的性能優化方法。
在安裝數據庫系統時,要為系統指定“塊大小”(一次物理讀寫操作所設計的字節數)。在創建表時,也要為表指定一定的空間。如果“塊大小”和“表空間”與實際的數據存儲不匹配的話,那么會產生許多磁盤碎片,這將降低數據庫物理操作的性能。
能否有效地優化應用軟件數據庫的性能,主要取決于開發者對數據庫系統的熟悉程度以及開發經驗。
● 數據庫安全問題
提高軟件系統的安全性應當從“管理”和“技術”兩方面著手。這里僅考慮技術手段(因為安全管理超出了軟件工程范疇),一般原則如下:
用戶只能用賬號登陸到應用軟件,通過應用軟件訪問數據庫,而沒有其它途徑可以操作數據庫。
對用戶賬號的密碼進行加密處理,確保在任何地方都不會出現密碼的明文。
確定每個角色對數據庫表的操作權限,如創建、檢索、更新、刪除等。每個角色擁有剛好能夠完成任務的權限,不多也不少。在應用時再為用戶分配角色,則每個用戶的權限等于他所兼角色的權限之和。
以上就是關于軟件設計中的數據庫設計是什么的全部內容,想了解更多關于數據庫設計的信息,請繼續關注中培偉業。