數(shù)據(jù)庫開發(fā)者常犯的錯誤(二)
數(shù)據(jù)庫開發(fā)者易犯的錯誤是開發(fā)人員在長期的經(jīng)驗(yàn)積累中總結(jié)出來的,之前已經(jīng)為大家介紹了四個數(shù)據(jù)庫開發(fā)者常犯的錯誤,即數(shù)據(jù)庫開發(fā)者常犯的錯誤(一),下文將為大家介紹更多的數(shù)據(jù)庫開發(fā)者常犯的錯誤類型。
1、第三范式并不是至高無上
另一方面,開發(fā)人員對數(shù)據(jù)庫的一知半解可能是一件比較危險的事情。我看到過很多數(shù)據(jù)庫被設(shè)計得過于死板,這些數(shù)據(jù)庫的設(shè)計者堅持把所有東西都放在查詢表中。
是的,數(shù)據(jù)庫開發(fā)者需要知道規(guī)范化的規(guī)則,但是你也需要知道什么時候要停止去用規(guī)范化,什么時候逆規(guī)范化反而可能會帶來更好的效果。
2、隱藏應(yīng)用邏輯的“黑匣子”
存儲過程和觸發(fā)器是兩個非常偉大的功能。當(dāng)你有多個客戶訪問一個數(shù)據(jù)庫的時候,它們可以幫助你確保對數(shù)據(jù)的一致性處理。
不過,它們也可能會變成一個隱藏應(yīng)用邏輯的“黑匣子”,讓W(xué)eb和瘦客戶端開發(fā)者無法查看和調(diào)試這些邏輯。在大多數(shù)情況下,數(shù)據(jù)庫代碼不能像其他應(yīng)用程序代碼一樣被進(jìn)行代碼測試和代碼調(diào)試。
因此,當(dāng)你要將代碼放到數(shù)據(jù)庫中的時候,花點(diǎn)時間來問一下自己:這些代碼是否真的適合放在數(shù)據(jù)庫中?
3、備份!備份!備份!
你的數(shù)據(jù)庫需要備份嗎?當(dāng)然需要!
我們?yōu)槭裁匆褦?shù)據(jù)存在數(shù)據(jù)庫中的原因之一就是想長久地保存它們。然而,我卻經(jīng)常碰到這樣的情況,有的開發(fā)人員卻因?yàn)檫@樣或那樣的原因——例如硬件故障、黑客或數(shù)據(jù)庫錯誤——因?yàn)闆]有備份而導(dǎo)致珍貴的數(shù)據(jù)永遠(yuǎn)丟失。因此在你開始開發(fā)之前,就應(yīng)該制定一個數(shù)據(jù)備份計劃,包括備份的頻率、備份的類型,以及離線備份的頻率等等,而不應(yīng)該在數(shù)據(jù)丟失后才想起備份的重要。
我不希望“亡羊補(bǔ)牢”的故事發(fā)生在各位數(shù)據(jù)庫程序員的身上。
4、你需要版本控制
說到備份,你需要擔(dān)心的不僅僅是數(shù)據(jù)的變化,還有數(shù)據(jù)庫的修改。你需要跟蹤并記錄下這些數(shù)據(jù)庫版本的變化,以便在任何需要的時候重新創(chuàng)建這個數(shù)據(jù)庫。如果你想真正專業(yè)化的開發(fā)軟件,你需要在你的數(shù)據(jù)庫設(shè)計中增加版本控制。
舉個例子來說,如果你想調(diào)試某個軟件版本中的客戶漏洞,但是你無法恢復(fù)到該軟件版本所對應(yīng)的數(shù)據(jù)庫版本的話,調(diào)試可能不會正常進(jìn)行。因此數(shù)據(jù)庫開發(fā)者必須要做好版本控制,否則可能因此帶來很多以后的麻煩。
5、使用數(shù)據(jù)庫自帶的工具
現(xiàn)代數(shù)據(jù)庫中已經(jīng)不僅僅是一些讓你存放數(shù)據(jù)的工具。它們還具有很多潛在的工具來使得管理數(shù)據(jù)庫更容易。
舉個例子來說,SQL Server中有工具可以檢測SQL語句中潛在的攻擊,甚至包括了一個向?qū)?,來告訴你該使用什么樣的索引才能使你的查詢上更高效,甚至可以模擬在真實(shí)服務(wù)器上的實(shí)際負(fù)載。
通過這些工具,我們的確在有的時候加速了數(shù)據(jù)庫運(yùn)行的速度,降低了CPU的利用率,但是實(shí)際情況是,很多人只有在一些專家顧問告訴他們后才知道在數(shù)據(jù)庫中存在這樣的工具。如果你不知道在你的數(shù)據(jù)庫中存在什么樣的工具,以及這些工具能幫你做什么,那么你花的錢就沒有得到應(yīng)有的回報。
6、不要因?yàn)槟阌幸粋€錘子就認(rèn)為什么都是釘子
現(xiàn)在有一種潮流,一些開發(fā)人員把應(yīng)用程序用到的所有數(shù)據(jù)都存儲在數(shù)據(jù)庫中。我曾經(jīng)看到有的應(yīng)用程序試圖創(chuàng)建一個完全數(shù)據(jù)元驅(qū)動(metadata-driven)的用戶界面,它把元數(shù)據(jù)和用戶偏好的數(shù)據(jù)都存放在相同的數(shù)據(jù)庫中。顯然這會讓開發(fā)人員的生活變得復(fù)雜和降低性能。
某些數(shù)據(jù)可能的確適合存放在本地文件中,而不是存放在網(wǎng)絡(luò)的客戶—服務(wù)器數(shù)據(jù)庫中。當(dāng)你存儲數(shù)據(jù)的時候,你需要分析一下你的數(shù)據(jù)適合存放在什么地方,是數(shù)據(jù)庫?注冊表?文本文件?還是XML文件?然后為其選擇最適合的存儲類型。“不要因?yàn)槟阌幸粋€錘子就認(rèn)為什么都是釘子”,不要因?yàn)橛幸粋€數(shù)據(jù)庫,就把所有東西都扔到數(shù)據(jù)庫中——現(xiàn)在還存在一種對XML文件的過度濫用,也是同樣的情況。
這就是我要為大家介紹的有關(guān)數(shù)據(jù)庫開發(fā)者常犯的錯誤類型,可能我介紹的還不夠全面,我會在以后的文章中為大家發(fā)布,謝謝大家的關(guān)注。
【編輯推薦】