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