數(shù)據(jù)庫是應(yīng)用程序和計(jì)算機(jī)的核心元素,并負(fù)責(zé)存儲運(yùn)行軟件應(yīng)用程序所需的所有重要數(shù)據(jù)。為了確保應(yīng)用程序的正常運(yùn)行,總是有一個或多個數(shù)據(jù)庫靜默運(yùn)行。我們可以將數(shù)據(jù)庫視為信息倉庫,以結(jié)構(gòu)化的方式存儲大量相關(guān)信息,并對其進(jìn)行合理分類以方便搜索和使用。因此,數(shù)據(jù)庫設(shè)計(jì)已成為軟件開發(fā)的重要組成部分。對于開發(fā)人員而言,設(shè)計(jì)高效的數(shù)據(jù)庫至關(guān)重要。那么設(shè)計(jì)數(shù)據(jù)庫的小技巧有哪些?如何保證數(shù)據(jù)庫的數(shù)據(jù)完整性?
設(shè)計(jì)數(shù)據(jù)庫的小技巧有哪些?
文檔、文檔、文檔
對所有的快捷方式、命名規(guī)范、限制和函數(shù)都要編制文檔。
采用給表、列[字段]、觸發(fā)器等加注釋的數(shù)據(jù)庫工具。是的,這有點(diǎn)費(fèi)事,但從長遠(yuǎn)來看,這樣做對開發(fā)、支持和跟蹤修改非常有用。
取決于你使用的數(shù)據(jù)庫系統(tǒng),可能有一些軟件會給你一些供你很快上手的文檔。你可能希望先開始在說,然后獲得越來越多的細(xì)節(jié)。或者你可能希望周期性的預(yù)排,在輸入新數(shù)據(jù)同時隨著你的進(jìn)展對每一部分細(xì)節(jié)化。不管你選擇哪種方式,總要對你的數(shù)據(jù)庫文檔化,或者在數(shù)據(jù)庫自身的內(nèi)部或者單獨(dú)建立文檔。這樣,當(dāng)你過了一年多時間后再回過頭來做第 2 個版本,你犯錯的機(jī)會將大大減少。
使用常用英語(或者其他任何語言)而不要使用編碼
為什么我們經(jīng)常采用編碼(比如 9935A 可能是'青島啤酒'的供應(yīng)代碼,4XF788-Q 可能是帳目編碼)?理由很多。但是用戶通常都用英語進(jìn)行思考而不是編碼。工作 5 年的會計(jì)或許知道 4XF788-Q 是什么東西,但新來的可就不一定了。在創(chuàng)建下拉菜單、列表、報表時最好按照英語名排序。假如你需要編碼,那你可以在編碼旁附上用戶知道的英語。
保存常用信息
讓一個表專門存放一般數(shù)據(jù)庫信息非常有用。我常在這個表里存放數(shù)據(jù)庫當(dāng)前版本、最近檢查/修復(fù)(對 FoxPro)、關(guān)聯(lián)設(shè)計(jì)文檔的名稱、客戶等信息。這樣可以實(shí)現(xiàn)一種簡單機(jī)制跟蹤數(shù)據(jù)庫,當(dāng)客戶抱怨他們的數(shù)據(jù)庫沒有達(dá)到希望的要求而與你聯(lián)系時,這樣做對非客戶機(jī)/服務(wù)器環(huán)境特別有用。
測試、測試、反復(fù)測試
建立或者修訂數(shù)據(jù)庫之后,必須用用戶新輸入的數(shù)據(jù)測試數(shù)據(jù)字段。最重要的是,讓用戶進(jìn)行測試并且同用戶一道保證你選擇的數(shù)據(jù)類型滿足商業(yè)要求。測試需要在把新數(shù)據(jù)庫投入實(shí)際服務(wù)之前完成。
檢查設(shè)計(jì)
在開發(fā)期間檢查數(shù)據(jù)庫設(shè)計(jì)的常用技術(shù)是通過其所支持的應(yīng)用程序原型檢查數(shù)據(jù)庫。換句話說,針對每一種最終表達(dá)數(shù)據(jù)的原型應(yīng)用,保證你檢查了數(shù)據(jù)模型并且查看如何取出數(shù)據(jù)。
如何保證數(shù)據(jù)庫的數(shù)據(jù)完整性?
用約束而非商務(wù)規(guī)則強(qiáng)制數(shù)據(jù)完整性
如果你按照商務(wù)規(guī)則來處理需求,那么你應(yīng)當(dāng)檢查商務(wù)層次/用戶界面:如果商務(wù)規(guī)則以后發(fā)生變化,那么只需要進(jìn)行更新即可。假如需求源于維護(hù)數(shù)據(jù)完整性的需要,那么在數(shù)據(jù)庫層面上需要施加限制條件。如果你在數(shù)據(jù)層確實(shí)采用了約束,你要保證有辦法把更新不能通過約束檢查的原因采用用戶理解的語言通知用戶界面。除非你的字段命名很冗長,否則字段名本身還不夠。
只要有可能,請采用數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的完整性。這不但包括通過標(biāo)準(zhǔn)化實(shí)現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。在寫數(shù)據(jù)的時候還可以增加觸發(fā)器來保證數(shù)據(jù)的正確性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵)的完整性所以不能強(qiáng)加于其他完整性規(guī)則之上。
分布式數(shù)據(jù)系統(tǒng)
對分布式系統(tǒng)而言,在你決定是否在各個站點(diǎn)復(fù)制所有數(shù)據(jù)還是把數(shù)據(jù)保存在一個地方之前應(yīng)該估計(jì)一下未來 5 年或者 10 年的數(shù)據(jù)量。當(dāng)你把數(shù)據(jù)傳送到其他站點(diǎn)的時候,最好在數(shù)據(jù)庫字段中設(shè)置一些標(biāo)記。在目的站點(diǎn)收到你的數(shù)據(jù)之后更新你的標(biāo)記。為了進(jìn)行這種數(shù)據(jù)傳輸,請寫下你自己的批處理或者調(diào)度程序以特定時間間隔運(yùn)行而不要讓用戶在每天的工作后傳輸數(shù)據(jù)。本地拷貝你的維護(hù)數(shù)據(jù),比如計(jì)算常數(shù)和利息率等,設(shè)置版本號保證數(shù)據(jù)在每個站點(diǎn)都完全一致。
強(qiáng)制指示完整性(參照完整性?)
沒有好辦法能在有害數(shù)據(jù)進(jìn)入數(shù)據(jù)庫之后消除它,所以你應(yīng)該在它進(jìn)入數(shù)據(jù)庫之前將其剔除。激活數(shù)據(jù)庫系統(tǒng)的指示完整性特性。這樣可以保持?jǐn)?shù)據(jù)的清潔而能迫使開發(fā)人員投入更多的時間處理錯誤條件。
如果兩個實(shí)體之間存在多對一關(guān)系,而且還有可能轉(zhuǎn)化為多對多關(guān)系,那么你最好一開始就設(shè)置成多對多關(guān)系。從現(xiàn)有的多對一關(guān)系轉(zhuǎn)變?yōu)槎鄬Χ嚓P(guān)系比一開始就是多對多關(guān)系要難得多。
采用視圖
為了在你的數(shù)據(jù)庫和你的應(yīng)用程序代碼之間提供另一層抽象,你可以為你的應(yīng)用程序建立專門的視圖而不必非要應(yīng)用程序直接訪問數(shù)據(jù)表。這樣做還等于在處理數(shù)據(jù)庫變更時給你提供了更多的自由。
給數(shù)據(jù)保有和恢復(fù)制定計(jì)劃
考慮數(shù)據(jù)保有策略并包含在設(shè)計(jì)過程中,預(yù)先設(shè)計(jì)你的數(shù)據(jù)恢復(fù)過程。采用可以發(fā)布給用戶/開發(fā)人員的數(shù)據(jù)字典實(shí)現(xiàn)方便的數(shù)據(jù)識別同時保證對數(shù)據(jù)源文檔化。編寫在線更新來"更新查詢"供以后萬一數(shù)據(jù)丟失可以重新處理更新。
用存儲過程讓系統(tǒng)做重活
解決了許多麻煩來產(chǎn)生一個具有高度完整性的數(shù)據(jù)庫解決方案之后,我決定封裝一些關(guān)聯(lián)表的功能組,提供一整套常規(guī)的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發(fā)。數(shù)據(jù)庫不只是一個存放數(shù)據(jù)的地方,它也是簡化編碼之地。
使用查找
控制數(shù)據(jù)完整性的最佳方式就是限制用戶的選擇。只要有可能都應(yīng)該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數(shù)據(jù)的一致性。某些公共數(shù)據(jù)特別適合查找:國家代碼、狀態(tài)代碼等。
上述就是關(guān)于設(shè)計(jì)數(shù)據(jù)庫的小技巧有哪些,以及如何保證數(shù)據(jù)庫的數(shù)據(jù)完整性的全部內(nèi)容,想了解更多關(guān)于數(shù)據(jù)庫的信息,請繼續(xù)關(guān)注中培偉業(yè)。