美章網(wǎng) 資料文庫(kù) 數(shù)據(jù)庫(kù)重構(gòu)在軟件開(kāi)發(fā)中的應(yīng)用范文

數(shù)據(jù)庫(kù)重構(gòu)在軟件開(kāi)發(fā)中的應(yīng)用范文

本站小編為你精心準(zhǔn)備了數(shù)據(jù)庫(kù)重構(gòu)在軟件開(kāi)發(fā)中的應(yīng)用參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫(xiě)作靈感。歡迎深入閱讀并收藏。

數(shù)據(jù)庫(kù)重構(gòu)在軟件開(kāi)發(fā)中的應(yīng)用

1數(shù)據(jù)庫(kù)重構(gòu)條件

數(shù)據(jù)庫(kù)重構(gòu)不僅適用于新數(shù)據(jù)庫(kù)開(kāi)發(fā),也適用于正在進(jìn)行維護(hù)和修改的現(xiàn)有數(shù)據(jù)倉(cāng)庫(kù)。在數(shù)據(jù)庫(kù)重構(gòu)過(guò)程中要高度結(jié)構(gòu)化和安全化,確保被其支持的應(yīng)用程序正常運(yùn)行。出現(xiàn)如下情形時(shí)數(shù)據(jù)庫(kù)必須重構(gòu)。

(1)有太多的行和列數(shù)據(jù)庫(kù)中的表展現(xiàn)了其在性能方面存在的問(wèn)題,通常數(shù)據(jù)庫(kù)包含一些含有10多億行的表,像這種情形可能更適用于分段數(shù)據(jù)庫(kù)或系統(tǒng)記錄資料庫(kù)。

(2)出現(xiàn)多功能表和多用途列用于數(shù)據(jù)語(yǔ)義的列在很多情況下取決于上下文是否需要重構(gòu)。例如,使用一個(gè)數(shù)據(jù)列存儲(chǔ)用戶(hù)生日還是雇員日期,取決于記錄指代的是一個(gè)用戶(hù)還是一個(gè)雇員。表缺乏內(nèi)聚力,其中的一列不能完全明確用途,試圖存放來(lái)自多個(gè)不同實(shí)體的數(shù)據(jù),這種情況下需對(duì)列進(jìn)行處理。(3)存在冗余信息重復(fù)數(shù)據(jù)展現(xiàn)了數(shù)據(jù)不一致的可能性,例如,在多個(gè)源數(shù)據(jù)系統(tǒng)中客戶(hù)信息是重復(fù)的,解決數(shù)據(jù)重復(fù)是數(shù)據(jù)庫(kù)的功能之一。

(4)存在復(fù)雜的ETL現(xiàn)象當(dāng)ETL包中存在太多流動(dòng)路徑和復(fù)雜的變換節(jié)點(diǎn)時(shí),故障排除和維護(hù)就變得困難。圍繞這些多用途的ETL對(duì)象,編寫(xiě)測(cè)試用例會(huì)很困難,因此,建立簡(jiǎn)單、單一用途的ETL對(duì)象集合并使用序?qū)ο箧溄铀鼈兪欠浅?扇〉谩?/p>

(5)存在大型SQL模塊當(dāng)一個(gè)SQL腳本或者預(yù)存程序視圖完成太多內(nèi)容時(shí),它經(jīng)常會(huì)是一個(gè)很大的、包含多個(gè)SQL語(yǔ)句的腳本。這樣的腳本存在著代碼重復(fù)的風(fēng)險(xiǎn),所以應(yīng)該分解為一小組獨(dú)立的、高內(nèi)聚低耦合的模塊。

(6)存在不符合的維度有兩個(gè)或兩個(gè)以上維度,并包含重疊數(shù)據(jù)的多維度數(shù)據(jù)模型會(huì)引起數(shù)據(jù)重復(fù)和不一致性,必須創(chuàng)造單一的、多功能的維度來(lái)避免這個(gè)問(wèn)題。

(7)濫用物化視圖有索引的視圖或物化的視圖是現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)很強(qiáng)大的功能。明智地使用,它們可以是數(shù)據(jù)存取和基表物理實(shí)現(xiàn)之間的一個(gè)有效緩沖區(qū)。然而,濫用物化視圖會(huì)嚴(yán)重地混淆數(shù)據(jù)庫(kù)設(shè)計(jì)。

(8)物化視圖利用不夠如果數(shù)據(jù)庫(kù)僅僅依賴(lài)訪問(wèn)基表,那么就存在脆弱性的風(fēng)險(xiǎn)。也就是說(shuō),這些基表物理實(shí)現(xiàn)的輕微變化,會(huì)對(duì)這些基表的不同訪問(wèn)器產(chǎn)生意想不到的效應(yīng)。物化視圖的選擇需要在查詢(xún)性能、視圖維修成本和基表靈活性之間取得適當(dāng)?shù)钠胶狻?/p>

(9)過(guò)度依賴(lài)文檔數(shù)據(jù)庫(kù)中的表、列、腳本、預(yù)存程序、ETL模塊和其他組件,如果在沒(méi)有所附文件的情況下難以理解,那么表明它們可能需要重構(gòu)。和軟件一樣,數(shù)據(jù)庫(kù)中的組件需要自我記錄和自我解釋。干凈的設(shè)計(jì)可以減少對(duì)文檔的需求。

2如何重構(gòu)

(1)驗(yàn)證重構(gòu)是否適當(dāng)首先應(yīng)思考如下問(wèn)題:①這個(gè)重構(gòu)有意義嗎?②現(xiàn)在所做的修改真的需要嗎,是否可向后推遲?③修改后在哪些方面得到優(yōu)化?

(2)選擇適當(dāng)?shù)闹貥?gòu)一旦確定要進(jìn)行重構(gòu),一定要選擇一個(gè)適當(dāng)?shù)闹貥?gòu)。有時(shí)候需要評(píng)估對(duì)重構(gòu)可能產(chǎn)生影響的數(shù)據(jù)模型等其他領(lǐng)域。例如,某一個(gè)項(xiàng)目團(tuán)隊(duì)可能希望引入列在財(cái)務(wù)表中添加結(jié)余,但是沒(méi)有意識(shí)到客戶(hù)表中已經(jīng)存在表示結(jié)余的列,在這種情況下,移動(dòng)列將是一個(gè)最合適的重構(gòu)。

(3)棄用原有的架構(gòu)當(dāng)用一個(gè)產(chǎn)出的數(shù)據(jù)倉(cāng)庫(kù)重構(gòu)一個(gè)數(shù)據(jù)模型時(shí),可能需要建立一個(gè)過(guò)渡或折舊時(shí)期,確保所有BI應(yīng)用能夠正常地工作。在此期間,原始架構(gòu)和重構(gòu)架構(gòu)并行運(yùn)行。一個(gè)BI應(yīng)用使用原始架構(gòu)或新架構(gòu),但不是兩個(gè)都使用。兩個(gè)架構(gòu)的數(shù)據(jù)必須同步,以確保BI應(yīng)用無(wú)論使用哪個(gè)架構(gòu)都能正常工作。在折舊期,BI應(yīng)用被修改,并從過(guò)時(shí)的架構(gòu)移動(dòng)到新的架構(gòu)。最后,過(guò)時(shí)的架構(gòu)下線,開(kāi)始最終測(cè)試,確保沒(méi)有數(shù)據(jù)損壞。折舊的過(guò)程需要盡可能自動(dòng)化,以確保重構(gòu)期間無(wú)縫轉(zhuǎn)變。

(4)在之前、之中、之后測(cè)試安全更改數(shù)據(jù)模型的唯一方法是有一個(gè)健康的在任何時(shí)候均可運(yùn)行和重復(fù)運(yùn)行的測(cè)試組,并與更改緊密相連。在開(kāi)始更改之前,要確保所有測(cè)試全部通過(guò),并評(píng)估測(cè)試組的完整性,增加任何希望擁有的測(cè)試用例。測(cè)試BI應(yīng)用數(shù)據(jù)架構(gòu)的所有方式。此外,要?jiǎng)?chuàng)建一個(gè)測(cè)試組來(lái)驗(yàn)證數(shù)據(jù)遷移策略。測(cè)試所有BI應(yīng)用,確保它們?cè)跀?shù)據(jù)或者行為中不發(fā)生更改。最為重要的是,為新引入的架構(gòu)更改增加新的測(cè)試,刪除過(guò)時(shí)或無(wú)關(guān)的測(cè)試。測(cè)試自動(dòng)化是在整個(gè)數(shù)據(jù)庫(kù)重構(gòu)過(guò)程中唯一可行的測(cè)試或復(fù)驗(yàn)方法。

(5)修改數(shù)據(jù)庫(kù)架構(gòu)可使用小的、高度凝聚的、腳本化的變化來(lái)實(shí)現(xiàn)已經(jīng)計(jì)劃了的重構(gòu)。使用測(cè)試驅(qū)動(dòng)數(shù)據(jù)庫(kù)開(kāi)發(fā)方法進(jìn)行很小的測(cè)試,建立一個(gè)可以持續(xù)使用的回歸測(cè)試組。編寫(xiě)完新代碼并通過(guò)新測(cè)試,檢查這些更改已經(jīng)在版本控制系統(tǒng)中。

(6)遷移源數(shù)據(jù)許多重構(gòu)需要把數(shù)據(jù)從舊架構(gòu)遷移到新架構(gòu)中,尤其當(dāng)重構(gòu)是一個(gè)產(chǎn)出的數(shù)據(jù)倉(cāng)庫(kù)時(shí)。移動(dòng)數(shù)據(jù)重構(gòu)是專(zhuān)門(mén)針對(duì)此項(xiàng)而進(jìn)行的設(shè)計(jì)。但有時(shí)候,如何提高數(shù)據(jù)質(zhì)量是重構(gòu)的一個(gè)目標(biāo),可進(jìn)行一個(gè)或多個(gè)數(shù)據(jù)質(zhì)量重構(gòu),例如,采用標(biāo)準(zhǔn)版本或者引入通用格式這樣的重構(gòu)。數(shù)據(jù)遷移也應(yīng)該編寫(xiě)腳本,但其需要經(jīng)過(guò)測(cè)試,以證明支持?jǐn)?shù)據(jù)遷移。

(7)重構(gòu)外部訪問(wèn)程序通常這涉及讓BI應(yīng)用適應(yīng)新架構(gòu),但也有可能涉及修改訪問(wèn)數(shù)據(jù)倉(cāng)庫(kù)的自定義程序。修改這些外部程序需要遵循規(guī)范的重構(gòu)步驟。

(8)運(yùn)行所有測(cè)試所有測(cè)試都必須在重構(gòu)前進(jìn)行,所有在重構(gòu)過(guò)程中添加的新測(cè)試也需要在完成重構(gòu)之后全部通過(guò)。理想情況下,讓所有測(cè)試自動(dòng)化進(jìn)行,并且在重構(gòu)期間重復(fù)第運(yùn)行它們。

(9)控制版本確保向版本控制系統(tǒng)提交所有修改過(guò)的文件和新文件,包括任何新部署或修改過(guò)的腳本或ETL對(duì)象、測(cè)試數(shù)據(jù)、生成代碼、測(cè)試用例、文檔和模型。

(10)宣布重構(gòu)向數(shù)據(jù)倉(cāng)庫(kù)和商業(yè)智能團(tuán)隊(duì)中的每個(gè)人宣傳重構(gòu)。除了直接訪問(wèn)數(shù)據(jù)倉(cāng)庫(kù)內(nèi)部架構(gòu)的所有團(tuán)體之外,確保所有人都正確地使用新架構(gòu)。

3結(jié)論

對(duì)數(shù)據(jù)庫(kù)進(jìn)行重構(gòu)時(shí),最重要的是持續(xù)確保完備數(shù)據(jù)建模原則所提供的架構(gòu)和這種自適應(yīng)方法提供的靈活性之間的平衡。如果健全的前期設(shè)計(jì)使用不足且過(guò)渡依賴(lài)重構(gòu),那么就可能會(huì)導(dǎo)致不必要的返工。相反地,適當(dāng)?shù)姆倒?huì)得到更好、更合適的數(shù)據(jù)庫(kù)設(shè)計(jì)選擇。

作者:張如云 單位:徐州機(jī)電工程高等職業(yè)學(xué)校

主站蜘蛛池模板: 日本高清免费一本视频在线观看| 男女裸体影院高潮| 国产精品亚洲综合五月天| xxxxx做受大片视频免费| 日本亚州视频在线八a| 亚洲一区二区三区久久| 永久免费毛片手机版在线看| 再灬再灬再灬深一点舒服| 蜜桃成熟时33d在线| 国产成人亚洲综合无码精品| 尤物视频www| 国语性猛交xxxx乱大交| 一级做a爱过程免费视频高清| 日本免费a级毛一片| 么公的又大又深又硬想要| 欧美影院网站视频观看| 亚洲精品韩国美女在线| 男男动漫全程肉无删减彩漫| 又黄又刺激视频| 色戒7分27秒大尺度在线| 国产小呦泬泬99精品| 亚洲综合15p| 国产精品成人一区无码| 97人洗澡人人澡人人爽人人模| 女人是男人的未来你的皮肤很柔顺| 中文字幕免费在线看电影大全| 日本特黄在线观看免费| 亚洲av无码片区一区二区三区| 欧美日韩**字幕一区| 亚洲综合无码一区二区| 男女爽爽无遮挡午夜视频在线观看 | 中文字幕一区二区三匹| 日本三级香港三级人妇99视| 久久精品第一页| 最近最新的免费中文字幕| 亚洲国产韩国一区二区| 欧美激情一区二区三区在线| 亚洲线精品一区二区三区影音先锋| 理论片2023最新在线观看| 免费看日b视频| 精品久久人人爽天天玩人人妻|