精選了其中的 60 個最佳技巧,并把這些技巧編寫成了本文,為了方便索引其內容劃分為 5 個部分:
第一部分介紹了設計數(shù)據庫之前12個基本技巧,包括命名規(guī)范和明確業(yè)務需求等(數(shù)據庫設計經驗談(1) );第二部分介紹設計數(shù)據庫表24個指南性技巧,涵蓋表內字段設計以及應該避免的常見問題等(數(shù)據庫設計經驗談 (2) );第三部分主要介紹選擇鍵和索引,包含10個技巧專門涉及系統(tǒng)生成的主鍵的正確用法,還有何時以及如何索引字段以獲得最佳性能等(數(shù)據庫設計經驗談 (3) )。本次第四部分主要討論保證數(shù)據完整性,如何保持數(shù)據庫的清晰和健壯,如何把有害數(shù)據降低到最小程度。
第 4 部分 - 保證數(shù)據的完整性
用約束而非商務規(guī)則強制數(shù)據完整性
如果你按照商務規(guī)則來處理需求,那么你應當檢查商務層次/用戶界面:如果商務規(guī)則以后發(fā)生變化,那么只需要進行更新即可。假如需求源于維護數(shù)據完整性的需要,那么在數(shù)據庫層面上需要施加限制條件。如果你在數(shù)據層確實采用了約束,你要保證有辦法把更新不能通過約束檢查的原因采用用戶理解的語言通知用戶界面。除非你的字段命名很冗長,否則字段名本身還不夠。
只要有可能,請采用數(shù)據庫系統(tǒng)實現(xiàn)數(shù)據的完整性。這不但包括通過標準化實現(xiàn)的完整性而且還包括數(shù)據的功能性。在寫數(shù)據的時候還可以增加觸發(fā)器來保證數(shù)據的正確性。不要依賴于商務層保證數(shù)據完整性;它不能保證表之間(外鍵)的完整性所以不能強加于其他完整性規(guī)則之上。
分布式數(shù)據系統(tǒng)
對分布式系統(tǒng)而言,在你決定是否在各個站點復制所有數(shù)據還是把數(shù)據保存在一個地方之前應該估計一下未來 5 年或者 10 年的數(shù)據量。當你把數(shù)據傳送到其他站點的時候,最好在數(shù)據庫字段中設置一些標記。在目的站點收到你的數(shù)據之后更新你的標記。為了進行這種數(shù)據傳輸,請寫下你自己的批處理或者調度程序以特定時間間隔運行而不要讓用戶在每天的工作后傳輸數(shù)據。本地拷貝你的維護數(shù)據,比如計算常數(shù)和利息率等,設置版本號保證數(shù)據在每個站點都完全一致。
強制指示完整性(參照完整性)
沒有好辦法能在有害數(shù)據進入數(shù)據庫之后消除它,所以你應該在它進入數(shù)據庫之前將其剔除。激活數(shù)據庫系統(tǒng)的指示完整性特性。這樣可以保持數(shù)據的清潔而能迫使開發(fā)人員投入更多的時間處理錯誤條件。
關系
如果兩個實體之間存在多對一關系,而且還有可能轉化為多對多關系,那么你最好一開始就設置成多對多關系。從現(xiàn)有的多對一關系轉變?yōu)槎鄬Χ嚓P系比一開始就是多對多關系要難得多。
采用視圖
為了在你的數(shù)據庫和你的應用程序代碼之間提供另一層抽象,你可以為你的應用程序建立專門的視圖而不必非要應用程序直接訪問數(shù)據表。這樣做還等于在處理數(shù)據庫變更時給你提供了更多的自由。
給數(shù)據保有和恢復制定計劃
考慮數(shù)據保有策略并包含在設計過程中,預先設計你的數(shù)據恢復過程。采用可以發(fā)布給用戶/開發(fā)人員的數(shù)據字典實現(xiàn)方便的數(shù)據識別同時保證對數(shù)據源文檔化。編寫在線更新來“更新查詢”供以后萬一數(shù)據丟失可以重新處理更新。
用存儲過程讓系統(tǒng)做重活
解決了許多麻煩來產生一個具有高度完整性的數(shù)據庫解決方案之后,我決定封裝一些關聯(lián)表的功能組,提供一整套常規(guī)的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發(fā)。數(shù)據庫不只是一個存放數(shù)據的地方,它也是簡化編碼之地。
使用查找
控制數(shù)據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數(shù)據的一致性。某些公共數(shù)據特別適合查找:國家代碼、狀態(tài)代碼等。
預告:在第五部分將介紹各種小技巧,不包括在以上 4 個部分中的其他技巧,五花八門,有了它們希望你的數(shù)據庫開發(fā)工作會更輕松一些。
相關推薦:2010年全國計算機等考二級C:程序設計實戰(zhàn)匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |