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