數(shù)據(jù)加載中……
          數(shù)據(jù)庫設(shè)計(jì)經(jīng)驗(yàn)談(8) (轉(zhuǎn))
          第 4 部分 - 保證數(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í)采用了約束,你要保證有辦法把更新不能通過約束檢查的原因采用用戶理解的語言通知用戶界面。除非你的字段命名很冗長,否則字段名本身還不夠。

            只要有可能,請(qǐng)采用數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的完整性。這不但包括通過標(biāo)準(zhǔn)化實(shí)現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。在寫數(shù)據(jù)的時(shí)候還可以增加觸發(fā)器來保證數(shù)據(jù)的正確性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵)的完整性所以不能強(qiáng)加于其他完整性規(guī)則之上。

            分布式數(shù)據(jù)系統(tǒng)

            對(duì)分布式系統(tǒng)而言,在你決定是否在各個(gè)站點(diǎn)復(fù)制所有數(shù)據(jù)還是把數(shù)據(jù)保存在一個(gè)地方之前應(yīng)該估計(jì)一下未來 5 年或者 10 年的數(shù)據(jù)量。當(dāng)你把數(shù)據(jù)傳送到其他站點(diǎn)的時(shí)候,最好在數(shù)據(jù)庫字段中設(shè)置一些標(biāo)記。在目的站點(diǎn)收到你的數(shù)據(jù)之后更新你的標(biāo)記。為了進(jìn)行這種數(shù)據(jù)傳輸,請(qǐng)寫下你自己的批處理或者調(diào)度程序以特定時(shí)間間隔運(yùn)行而不要讓用戶在每天的工作后傳輸數(shù)據(jù)。本地拷貝你的維護(hù)數(shù)據(jù),比如計(jì)算常數(shù)和利息率等,設(shè)置版本號(hào)保證數(shù)據(jù)在每個(gè)站點(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í)間處理錯(cuò)誤條件。

            
          關(guān)系

            如果兩個(gè)實(shí)體之間存在多對(duì)一關(guān)系,而且還有可能轉(zhuǎn)化為多對(duì)多關(guān)系,那么你最好一開始就設(shè)置成多對(duì)多關(guān)系。從現(xiàn)有的多對(duì)一關(guān)系轉(zhuǎn)變?yōu)槎鄬?duì)多關(guān)系比一開始就是多對(duì)多關(guān)系要難得多。

            采用視圖

            為了在你的數(shù)據(jù)庫和你的應(yīng)用程序代碼之間提供另一層抽象,你可以為你的應(yīng)用程序建立專門的視圖而不必非要應(yīng)用程序直接訪問數(shù)據(jù)表。這樣做還等于在處理數(shù)據(jù)庫變更時(shí)給你提供了更多的自由。

            給數(shù)據(jù)保有和恢復(fù)制定計(jì)劃

            考慮數(shù)據(jù)保有策略并包含在設(shè)計(jì)過程中,預(yù)先設(shè)計(jì)你的數(shù)據(jù)恢復(fù)過程。采用可以發(fā)布給用戶/開發(fā)人員的數(shù)據(jù)字典實(shí)現(xiàn)方便的數(shù)據(jù)識(shí)別同時(shí)保證對(duì)數(shù)據(jù)源文檔化。編寫在線更新來“更新查詢”供以后萬一數(shù)據(jù)丟失可以重新處理更新。

            用存儲(chǔ)過程讓系統(tǒng)做重活

            解決了許多麻煩來產(chǎn)生一個(gè)具有高度完整性的數(shù)據(jù)庫解決方案之后,我決定封裝一些關(guān)聯(lián)表的功能組,提供一整套常規(guī)的存儲(chǔ)過程來訪問各組以便加快速度和簡化客戶程序代碼的開發(fā)。數(shù)據(jù)庫不只是一個(gè)存放數(shù)據(jù)的地方,它也是簡化編碼之地。

            使用查找

            控制數(shù)據(jù)完整性的最佳方式就是限制用戶的選擇。只要有可能都應(yīng)該提供給用戶一個(gè)清晰的價(jià)值列表供其選擇。這樣將減少鍵入代碼的錯(cuò)誤和誤解同時(shí)提供數(shù)據(jù)的一致性。某些公共數(shù)據(jù)特別適合查找:國家代碼、狀態(tài)代碼等。

            預(yù)告:在第五部分將介紹各種小技巧,不包括在以上 4 個(gè)部分中的其他技巧,五花八門,有了它們希望你的數(shù)據(jù)庫開發(fā)工作會(huì)更輕松一些。

          posted on 2007-09-06 17:41 當(dāng)扎瓦 閱讀(167) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大埔区| 黄浦区| 水城县| 汝阳县| 图们市| 隆化县| 耒阳市| 体育| 台南市| 义马市| 老河口市| 遵义县| 栾川县| 调兵山市| 福鼎市| 嘉荫县| 寻甸| 金堂县| 武陟县| 五大连池市| 五寨县| 武乡县| 广汉市| 容城县| 高州市| 沙雅县| 遂溪县| 三河市| 淮南市| 洛扎县| 香港 | 富顺县| 静宁县| 莱阳市| 开远市| 阿克陶县| 永春县| 华安县| 昌乐县| 南雄市| 桐梓县|