自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析數(shù)據(jù)庫設(shè)計(jì)中的敏捷方法

運(yùn)維 數(shù)據(jù)庫運(yùn)維
在過去幾年中,我們將敏捷方法應(yīng)用于數(shù)據(jù)庫設(shè)計(jì)中。我們總結(jié)出一些技巧,使得當(dāng)應(yīng)用程序發(fā)展時(shí),數(shù)據(jù)庫也能夠進(jìn)化,這是敏捷方法的一個(gè)重要屬性。我們的方法是通過持續(xù)集成以及自動(dòng)重構(gòu),通過數(shù)據(jù)庫管理人員(DBA)和應(yīng)用開發(fā)人員的緊密合作。這些技巧在應(yīng)用開發(fā)的各個(gè)時(shí)期都有效。

引言

在過去幾年中,我們將敏捷方法應(yīng)用于數(shù)據(jù)庫設(shè)計(jì)中。我們總結(jié)出一些技巧,使得當(dāng)應(yīng)用程序發(fā)展時(shí),數(shù)據(jù)庫也能夠進(jìn)化,這是敏捷方法的一個(gè)重要屬性。我們的方法是通過持續(xù)集成以及自動(dòng)重構(gòu),通過數(shù)據(jù)庫管理人員(DBA)和應(yīng)用開發(fā)人員的緊密合作。這些技巧在應(yīng)用開發(fā)的各個(gè)時(shí)期都有效。

1、敏捷方法學(xué)

 

近年來,出現(xiàn)了一種新的軟件開發(fā)方法學(xué)-敏捷方法學(xué)。這給數(shù)據(jù)庫設(shè)計(jì)提出了一些新的、巨大的需求。這些需求的一個(gè)中心就是進(jìn)化設(shè)計(jì)。在一個(gè)敏捷項(xiàng)目中,需要假定我們并不能事先確定系統(tǒng)的需求。因此在項(xiàng)目的初期有一個(gè)詳細(xì)設(shè)計(jì)階段的想法是不現(xiàn)實(shí)的。系統(tǒng)的設(shè)計(jì)必須隨著軟件的變化而進(jìn)化。敏捷方法,尤其是極限編程(XP),通過一些實(shí)踐使這種進(jìn)化設(shè)計(jì)成為可能。在數(shù)據(jù)庫設(shè)計(jì)采用敏捷方法,反復(fù)迭代。

許多人會(huì)懷疑敏捷方法能否用于有大型數(shù)據(jù)庫組件的系統(tǒng)。但我們的確使用了許多敏捷和XP技巧,用于解決基于大型數(shù)據(jù)庫的項(xiàng)目中的進(jìn)化與迭代問題。

本文將介紹一些在數(shù)據(jù)庫設(shè)計(jì)采用敏捷方法的實(shí)踐。當(dāng)然,這并不是說我們已經(jīng)完全解決了數(shù)據(jù)庫進(jìn)化的問題,但是我們想提供一些行之有效的方法。

2、積極應(yīng)對(duì)變化

敏捷編程的一個(gè)顯著特點(diǎn)就是它面對(duì)變化的態(tài)度。對(duì)軟件過程的一般解釋是盡早理解需求,停止需求的變動(dòng),將這些需求作為設(shè)計(jì)的基礎(chǔ),停止設(shè)計(jì)的變動(dòng),然后開始構(gòu)筑體系。這就是瀑布方法--基于計(jì)劃的生命周期。

這種方法通過大量的前期工作來減少變化。一旦前期工作完成,需求變化會(huì)引起很大的問題。因此當(dāng)需求變化時(shí),這樣的方法就會(huì)有很大的問題,因此需求變動(dòng)是這種過程的一個(gè)很大的問題。

而敏捷編程卻以另外一種方式來面對(duì)變化。擁抱變化,甚至允許在項(xiàng)目開發(fā)的后期發(fā)生變化。盡管變化會(huì)被控制,但是這種態(tài)度會(huì)允許盡可能多的變化。變化部分來自于項(xiàng)目需求的不穩(wěn)定,部分來自于要支持變化的商業(yè)環(huán)境來面對(duì)競爭壓力。

為了做到這樣,必須采取不同的設(shè)計(jì)態(tài)度。設(shè)計(jì)不僅僅是一個(gè)階段--在開始建筑之前就大部分完成的一個(gè)階段;設(shè)計(jì)是一個(gè)持續(xù)的過程,與編碼、測試甚至發(fā)布相關(guān)。這是計(jì)劃設(shè)計(jì)與進(jìn)化設(shè)計(jì)的不同之處。敏捷方法的一個(gè)重要貢獻(xiàn)是提出了在可控制方式下的進(jìn)化設(shè)計(jì)。因此不是由于設(shè)計(jì)沒有預(yù)先計(jì)劃好,產(chǎn)生了混亂。敏捷方法提供了控制進(jìn)化設(shè)計(jì)和使其可行的技巧。

敏捷方法的一個(gè)重要特點(diǎn)就是迭代式開發(fā),即整個(gè)項(xiàng)目生命周期中運(yùn)行多個(gè)完整的軟件生命周期循環(huán)。敏捷過程在每次迭代中都會(huì)度過一個(gè)完整的生命周期。迭代可以完成最終產(chǎn)品的需求子集中編碼、測試以及集成代碼。敏捷方法迭代時(shí)間較短,通常是一周到兩個(gè)月之間,而且我們更傾向于更短的迭代周期。

當(dāng)使用敏捷方法時(shí),最大的問題就是數(shù)據(jù)庫如何進(jìn)行進(jìn)化設(shè)計(jì)。許多人認(rèn)為數(shù)據(jù)庫設(shè)計(jì)是前期計(jì)劃的工作,而在后期改變數(shù)據(jù)庫設(shè)計(jì)計(jì)劃會(huì)引起應(yīng)用軟件的崩潰;在配置以后改變數(shù)據(jù)庫設(shè)計(jì)計(jì)劃會(huì)導(dǎo)致數(shù)據(jù)遷移問題。

在過去三年我們參加了一個(gè)大型的項(xiàng)目,其中用到了切實(shí)可行的進(jìn)化設(shè)計(jì)的方法。該項(xiàng)目包括100人的項(xiàng)目組, 200多張表格,數(shù)據(jù)庫在一年半的最初開發(fā)中一直在進(jìn)化,甚至在為多用戶分發(fā)的過程中也在進(jìn)化。一開始我們一個(gè)月迭代一次,過了幾個(gè)月之后變?yōu)?周迭代一次。

隨著我們將這些經(jīng)驗(yàn)推廣到項(xiàng)目中越來越多的部分,從越來越多的案例中獲得經(jīng)驗(yàn)。同時(shí),我們也從其他敏捷項(xiàng)目中吸收了一些經(jīng)驗(yàn)。

2.1限制條件

在講述實(shí)踐方法之前,必須指出我們并沒有解決所有的數(shù)據(jù)庫進(jìn)化設(shè)計(jì)問題,特別是:

我們是為單獨(dú)的應(yīng)用設(shè)計(jì)一個(gè)應(yīng)用數(shù)據(jù)庫,而不是試圖集成多個(gè)數(shù)據(jù)庫;

我們沒有做到24*7的數(shù)據(jù)庫更新。

雖然很多人認(rèn)為我們無法解決這個(gè)問題,但其實(shí)這些問題是可以解決的。當(dāng)然這需要進(jìn)一步的工作,光說是不能解決問題的。

#p#

3、實(shí)踐

我們有關(guān)于數(shù)據(jù)庫進(jìn)化設(shè)計(jì)的方法依賴于一些重要的實(shí)踐。

3.1數(shù)據(jù)庫管理人員與開發(fā)人員緊密合作

敏捷方法的一個(gè)重要原則就是擁有不同技能和背景的人能夠緊密合作。正式的會(huì)議和文檔不能達(dá)到交流效果,因此他們需要一直一起工作,親密合作。所有的項(xiàng)目組成員都需要緊密合作:系統(tǒng)分析人員,項(xiàng)目經(jīng)理,行業(yè)專家,開發(fā)人員以及數(shù)據(jù)庫管理人員(DBA)

開發(fā)人員的每項(xiàng)工作可能都需要DBA的幫助。開發(fā)人員和DBA需要考慮是否需要對(duì)數(shù)據(jù)庫計(jì)劃做很大的改變。開發(fā)人員向DBA咨詢?nèi)绾螒?yīng)對(duì)變化:開發(fā)人員知道需要什么新的功能,而DBA對(duì)應(yīng)用中的數(shù)據(jù)有全局的觀念。

為了達(dá)到親密合作的效果,DBA必須使自己易于接近。DBA需要留出幾分鐘的時(shí)間,讓開發(fā)人員來提問。必須確保DBA和開發(fā)人員坐在一起,這樣他們就很容易溝通。同時(shí)必須確保應(yīng)用設(shè)計(jì)會(huì)議是公開的,這樣DBA可以隨時(shí)加入進(jìn)來。在很多情況下我們發(fā)現(xiàn)人們?cè)贒BA和應(yīng)用開發(fā)人員之間建立屏障,這些屏障必須去除,這樣進(jìn)化數(shù)據(jù)庫設(shè)計(jì)才有可能。

3.2每個(gè)項(xiàng)目組成員都有自己的數(shù)據(jù)庫實(shí)例

進(jìn)化設(shè)計(jì)認(rèn)為人們通過嘗試來進(jìn)行學(xué)習(xí)。在編程期間開發(fā)人員在如何實(shí)施某個(gè)特征,應(yīng)用某個(gè)首選的方案之前做一些試驗(yàn)。數(shù)據(jù)庫設(shè)計(jì)也是如此。因此,每個(gè)開發(fā)人員都有自己用來試驗(yàn)的實(shí)例,而不必影響其它人,這一點(diǎn)很重要。這樣每個(gè)人都可以根據(jù)自己的需要進(jìn)行試驗(yàn)。

許多DBA專家認(rèn)為多個(gè)數(shù)據(jù)庫是一種麻煩,不易于實(shí)際應(yīng)用,但我們發(fā)現(xiàn)操作一百個(gè)左右的數(shù)據(jù)庫是很容易的。當(dāng)然其中很重要的是擁有便利的工具,使你像操作文件一樣操作數(shù)據(jù)庫。

3.3開發(fā)人員數(shù)據(jù)庫經(jīng)常集成到共享主數(shù)據(jù)庫

盡管開發(fā)人員可以在他們自己的空間頻繁試驗(yàn),但是將不同的工作定期匯合也是很重要的。應(yīng)用開發(fā)需要一個(gè)共享主數(shù)據(jù)庫,所有的工作都匯集于此。當(dāng)開發(fā)人員開始工作時(shí)他們從主數(shù)據(jù)庫獲取拷貝到自己的工作空間,進(jìn)行操作和修改,然后將變化反饋進(jìn)入主數(shù)據(jù)庫。我們的規(guī)定是每個(gè)開發(fā)人員要每天提交匯合一次。

假設(shè)開發(fā)人員上午10點(diǎn)開始一項(xiàng)開發(fā)任務(wù),這項(xiàng)任務(wù)的一部分是改變數(shù)據(jù)庫計(jì)劃。如果這種改變很簡單,如增加一個(gè)字段,他就可以自己決定。通過數(shù)據(jù)字典的幫助,開發(fā)人員還必須確保他想增加的字段數(shù)據(jù)庫中沒有。但是如果他與DBA討論這種可能的變化,那么工作就要簡單的多。

當(dāng)他準(zhǔn)備開始時(shí),先從主數(shù)據(jù)庫中獲取一份拷貝,這樣就可以自由地改變數(shù)據(jù)庫計(jì)劃和代碼。因?yàn)樗褂玫氖亲约旱臄?shù)據(jù)庫實(shí)例,所以不會(huì)影響別人。在某個(gè)時(shí)候,如下午3點(diǎn),他很清楚需要什么樣的數(shù)據(jù)庫變化,甚至此時(shí)他還沒有完全做完他的編碼工作。這時(shí)他找到DBA,告訴他想要的變化。這時(shí)DBA可以提出開發(fā)人員沒有考慮到的問題。當(dāng)然大多數(shù)時(shí)候都很好,DBA同意這種變化(通過一個(gè)或多個(gè)數(shù)據(jù)庫重構(gòu))。DBA使變化馬上發(fā)生(除非他們是破壞性的變化),這樣開發(fā)人員可以繼續(xù)他的工作,在任何時(shí)候提交代碼,因?yàn)镈BA已經(jīng)將這些變化發(fā)送給主數(shù)據(jù)庫。

可以將這個(gè)原則看作類似于持續(xù)集成,持續(xù)集成常用于源碼管理。實(shí)際上這就是將數(shù)據(jù)庫看作是另一種源代碼。因?yàn)榕渲霉芾硐到y(tǒng)象控制源代碼一樣控制主數(shù)據(jù)庫。只要我們構(gòu)建成功,數(shù)據(jù)庫和源代碼一起被送入配置管理系統(tǒng),這樣我們就有兩者完整和同步的版本歷史。

對(duì)于源代碼來說,集成中的問題被源代碼控制系統(tǒng)處理。對(duì)于數(shù)據(jù)庫來說,要做的工作稍微多一些。所有數(shù)據(jù)庫的變化都需要妥善處理,如自動(dòng)化數(shù)據(jù)庫重構(gòu)。此外DBA需要審視任何數(shù)據(jù)庫變化,保證其符合整個(gè)數(shù)據(jù)庫的計(jì)劃。為了使這項(xiàng)工作做的比較平穩(wěn),在集成的過程中不應(yīng)該出現(xiàn)大的變化--因此需要DBA與開發(fā)人員緊密合作。

我們強(qiáng)調(diào)經(jīng)常性的小集成,因?yàn)樗确墙?jīng)常性的大集成容易得多。集成的復(fù)雜度會(huì)隨著集成的規(guī)模呈幾何級(jí)度增加。因此做許多小的變化在實(shí)踐中更易于實(shí)現(xiàn),當(dāng)然這看上去與直覺相抵觸。

3.4數(shù)據(jù)庫包含計(jì)劃和測試數(shù)據(jù)

當(dāng)提到數(shù)據(jù)庫的時(shí)候,我們并不僅僅指數(shù)據(jù)庫計(jì)劃,而且還包括相當(dāng)規(guī)模的數(shù)據(jù)。這些數(shù)據(jù)包括應(yīng)用所需的標(biāo)準(zhǔn)數(shù)據(jù),如全國所有的省份名,以及一些樣本客戶的樣本數(shù)據(jù)。

數(shù)據(jù)的作用:

1、 易于測試

使用大量的自動(dòng)化測試可以幫助穩(wěn)定應(yīng)用的發(fā)展。這樣的測試在敏捷方法里是常用的方法。為了使這些測試有效進(jìn)行,很理智的方法是在一個(gè)有樣本測試數(shù)據(jù)的基礎(chǔ)上工作,這樣所有的測試可以在程序正式進(jìn)行之前完成。

2、測試數(shù)據(jù)庫的遷移

除了測試代碼之外,樣本測試數(shù)據(jù)允許我們測試數(shù)據(jù)庫的遷移,當(dāng)改變了數(shù)據(jù)庫的計(jì)劃后,我們還必須保證所有的計(jì)劃變更也能夠處理樣本數(shù)據(jù)。

在大多數(shù)項(xiàng)目中這些樣本數(shù)據(jù)是虛構(gòu)的。然而在某些項(xiàng)目中人們使用實(shí)際數(shù)據(jù)作為例子。在這些情況下,數(shù)據(jù)從先前由自動(dòng)化數(shù)據(jù)遷移代碼的系統(tǒng)中提取出來。很明顯不能馬上遷移所有的數(shù)據(jù),因?yàn)樵谠缙诘袛?shù)據(jù)庫只有小部分建立起來。但是我們希望當(dāng)應(yīng)用和數(shù)據(jù)庫發(fā)展時(shí),改變遷移代碼。這樣不僅能夠盡早解決遷移問題,也使行業(yè)專家易于處理這個(gè)正在開發(fā)的系統(tǒng)。因?yàn)橛兴麄兪煜さ臄?shù)據(jù),所以他們會(huì)指出可能給數(shù)據(jù)庫和應(yīng)用設(shè)計(jì)帶來問題的地方。因此我們建議在項(xiàng)目的早期迭代中引入實(shí)際數(shù)據(jù)。

3.5所有的變化應(yīng)該數(shù)據(jù)庫重構(gòu)

重構(gòu)技術(shù)就是應(yīng)用所有可控技術(shù)來改變現(xiàn)有的代碼基礎(chǔ)。與此類似我們定義了數(shù)據(jù)庫重構(gòu)也給數(shù)據(jù)庫的改變提供了類似的控制。

數(shù)據(jù)庫重構(gòu)的不同之處在于它必須將三種不同的變化同時(shí)完成:

  • 改變數(shù)據(jù)庫計(jì)劃
  • 進(jìn)行數(shù)據(jù)遷移
  • 改變數(shù)據(jù)庫存取代碼

于是當(dāng)描述數(shù)據(jù)庫重構(gòu)時(shí),我們必須描述變化的三個(gè)方面,并確保在應(yīng)用另一個(gè)重構(gòu)之前完成了這三種變化。

我們必須文檔化不同的數(shù)據(jù)庫重構(gòu),因此我們還不能詳細(xì)描述他們。然而這里有幾點(diǎn)需要指出:像代碼重構(gòu)一樣,數(shù)據(jù)庫重構(gòu)非常微小。概念鏈一系列微小的變化,數(shù)據(jù)庫和代碼很相似。變化的三個(gè)屬性使保持小的變化更加重要。

許多數(shù)據(jù)庫重構(gòu),如增加一個(gè)字段,可以不必更新所有存取系統(tǒng)的代碼來完成。但是如果在使用新計(jì)劃之前并不了解它,該字段將會(huì)無用,因?yàn)樾掠?jì)劃不知道其變化之處。許多變化,沒有考慮整個(gè)系統(tǒng)計(jì)劃,我們稱之為破壞性變化,如將一個(gè)已經(jīng)存在的空值列設(shè)置為非空。破壞性變化需要多加留心,留心的程度依賴于包含破壞性的程度。一個(gè)小破壞性的例子是將一個(gè)已經(jīng)存在的空值列設(shè)置為非空,在這種情況下你可以蒙著頭做。

而重構(gòu)將考慮數(shù)據(jù)庫中空值數(shù)據(jù)。開發(fā)人員將更新數(shù)據(jù)庫映射代碼,因此更新不會(huì)破壞其它人的代碼;如果偶然會(huì)破壞,開發(fā)人員將在建立和使用測試時(shí)發(fā)現(xiàn)問題。

將一個(gè)經(jīng)常使用的表分成兩個(gè)是一種更復(fù)雜的破壞。在這種情況中提前讓所有人知道變化到來很重要,這樣他們可以有所準(zhǔn)備。此外應(yīng)該在一個(gè)更安全的時(shí)刻來實(shí)施變化。

這里面很重要的一點(diǎn)是選擇適用于你做出的變化的過程。

3.6自動(dòng)重構(gòu)

在代碼世界中許多語言能夠?qū)崿F(xiàn)自動(dòng)重構(gòu)。在計(jì)劃變化和數(shù)據(jù)遷移過程中,這種自動(dòng)化對(duì)于數(shù)據(jù)庫也非常重要。因此每個(gè)數(shù)據(jù)庫重構(gòu)都可以通過編寫SQL DDL(對(duì)于計(jì)劃變化)和DML(對(duì)于數(shù)據(jù)遷移)來完成。這些變化不是通過手工實(shí)現(xiàn),而是通過一些SQL語句來自動(dòng)實(shí)現(xiàn)變化。

一旦完成代碼,我們保存這些代碼文件來產(chǎn)生數(shù)據(jù)庫變化的完整的變化記錄,作為數(shù)據(jù)庫重構(gòu)的結(jié)果。我們于是可以更新任何實(shí)例到最新的主數(shù)據(jù)庫,通過運(yùn)行在我們拷貝主數(shù)據(jù)庫來產(chǎn)生更早的數(shù)據(jù)庫實(shí)例的變化記錄。

自動(dòng)化變化的序列化是對(duì)于持續(xù)集成和遷移產(chǎn)品數(shù)據(jù)庫的一個(gè)基本功能。

為了最后產(chǎn)品數(shù)據(jù)庫我們并不在常規(guī)迭代周期中實(shí)施變化。我們?cè)诿恳粋€(gè)發(fā)布之間建立完整的數(shù)據(jù)庫重構(gòu)變化日志。毫無疑問,這是一個(gè)巨大的變化,我們必須離線實(shí)施該變化。在實(shí)際應(yīng)用之前先測試遷移計(jì)劃絕對(duì)是明智之舉。迄今為止,這項(xiàng)技術(shù)相當(dāng)管用。通過將大變化分解為小的簡單的變化,我們可以對(duì)產(chǎn)品數(shù)據(jù)進(jìn)行大的變化,同時(shí)又不會(huì)給我們太多的麻煩。套用兵法中的一句話,就是"化整為零"。

除了自動(dòng)化向前的變化,我們也要考慮重構(gòu)時(shí)向后的變化。如果能夠做到這樣就可以回到以前的數(shù)據(jù)庫狀態(tài)。在我們的項(xiàng)目中并沒有這樣做,因?yàn)闆]有這個(gè)需求,但這同樣是很重要的基本原則。

3.7自動(dòng)地更新所有開發(fā)人員的數(shù)據(jù)庫

人們變化和更新主數(shù)據(jù)庫,但是如何發(fā)現(xiàn)主數(shù)據(jù)庫已經(jīng)發(fā)生變化?在傳統(tǒng)的持續(xù)集成有源代碼的環(huán)境中,開發(fā)人員在提交變化之前先更新主數(shù)據(jù)庫。這樣他們就可以在提交變化給共享主數(shù)據(jù)庫之前,解決他們自己的機(jī)器上的問題。

每次主數(shù)據(jù)庫發(fā)生改變時(shí),我們都要更新開發(fā)人員的數(shù)據(jù)庫。當(dāng)主數(shù)據(jù)庫發(fā)生變化時(shí),我們自動(dòng)化更新所有項(xiàng)目成員的數(shù)據(jù)庫。相同的重構(gòu)代碼更新主數(shù)據(jù)庫上的同時(shí),自動(dòng)更新成員數(shù)據(jù)庫。也許有人認(rèn)為在開發(fā)人員不知情的情況下,更新開發(fā)人員數(shù)據(jù)庫會(huì)產(chǎn)生很多問題,但在實(shí)踐中我們沒發(fā)現(xiàn)什么問題。當(dāng)然,這只在人們聯(lián)網(wǎng)時(shí)管用。所以當(dāng)開發(fā)人員離線時(shí),必須盡快與主數(shù)據(jù)庫重新保持同步。

3.8清晰地分離所有的數(shù)據(jù)庫獲取代碼

為了理解數(shù)據(jù)庫重構(gòu)的結(jié)果,了解應(yīng)用程序如何使用數(shù)據(jù)庫也非常重要。如果SQL語句分布在代碼基礎(chǔ)周圍,則很難這樣去做。因此一個(gè)清晰的數(shù)據(jù)庫獲取層很重要,它用來顯示數(shù)據(jù)庫如何被使用,在哪里被使用。

清晰的數(shù)據(jù)庫層有很多好處。它減少了開發(fā)人員操縱數(shù)據(jù)庫時(shí)需要使用SQL知識(shí)的地方,這樣使對(duì)SQL語句不太熟悉的開發(fā)人員更易開發(fā)。對(duì)于DBA來說,給他提供了清晰的代碼,可以清楚地了解數(shù)據(jù)庫將如何使用。這也幫助準(zhǔn)備索引、數(shù)據(jù)庫優(yōu)化,優(yōu)化SQL語句,使DBA更好地理解數(shù)據(jù)庫如何被使用。

#p#

4、變化法則

如同任何實(shí)踐一樣,這些原則必須根據(jù)你特殊的環(huán)境變化。沒有一成不變的項(xiàng)目,我們必須要應(yīng)對(duì)變化。

4.1保持多個(gè)數(shù)據(jù)庫在一個(gè)系統(tǒng)中

簡單項(xiàng)目也許只需要一個(gè)主數(shù)據(jù)庫。但是復(fù)雜項(xiàng)目需要有多個(gè)數(shù)據(jù)庫,即數(shù)據(jù)庫系。如果在投入生產(chǎn)之前數(shù)據(jù)庫必須分支,那么我們可以創(chuàng)建新的數(shù)據(jù)庫系。數(shù)據(jù)庫系類似于代碼的分支,需要不同測試數(shù)據(jù)集來進(jìn)行測試。

當(dāng)開發(fā)人員從主數(shù)據(jù)庫中獲取了一份拷貝,必須注冊(cè)他們?cè)谛薷哪膫€(gè)數(shù)據(jù)庫系。當(dāng)DBA更新主數(shù)據(jù)庫某個(gè)數(shù)據(jù)庫系時(shí),同時(shí)更新了所有注冊(cè)這個(gè)數(shù)據(jù)庫系的開發(fā)人員的數(shù)據(jù)庫。

4.2不需要專職的DBA

所有這些聽上去好像需要大量的工作,但它并不需要大量的人力資源。在最大的項(xiàng)目中,我們有30個(gè)開發(fā)人員,項(xiàng)目組規(guī)模100人(包括質(zhì)量評(píng)價(jià)、分析人員和管理人員),我們大概有100多個(gè)不同系列的產(chǎn)品分布在各工作站上。但所有這些工作只需要一個(gè)專職DBA,只有兩個(gè)編程人員業(yè)余幫忙。

在小項(xiàng)目中甚至不需要專職DBA。當(dāng)我們將這些技巧用于更小的項(xiàng)目--12人左右的小項(xiàng)目時(shí),發(fā)現(xiàn)該項(xiàng)目不需要一個(gè)專職的DBA。與此相反,我們依靠兩個(gè)對(duì)數(shù)據(jù)庫感興趣的開發(fā)人員業(yè)余處理DBA任務(wù)。

這是自動(dòng)化的功勞。如果對(duì)每項(xiàng)任務(wù)進(jìn)行自動(dòng)化處理,就可以用更少的人來完成更多的工作。

5、輔助工具

數(shù)據(jù)庫進(jìn)化需要大量的重復(fù)性工作,我們可以開發(fā)一些簡單工具來幫助我們解決大量的重復(fù)性工作。

自動(dòng)化的最有價(jià)值的地方就是有一個(gè)通用數(shù)據(jù)庫任務(wù)簡單代碼集。自動(dòng)化的任務(wù)包括:

  • 用戶資料與現(xiàn)在管理員的資料一致
  • 創(chuàng)建新用戶
  • 復(fù)制數(shù)據(jù)庫計(jì)劃并協(xié)同修改
  • 移動(dòng)并合成數(shù)據(jù)庫
  • 刪除用戶
  • 導(dǎo)出用戶,這樣項(xiàng)目組成員可以分發(fā)離線數(shù)據(jù)庫備份。
  • 導(dǎo)入用戶,這樣項(xiàng)目組成員可以擁有數(shù)據(jù)庫備份,導(dǎo)入數(shù)據(jù)庫,創(chuàng)建新計(jì)劃。
  • 導(dǎo)出基線,將主數(shù)據(jù)庫進(jìn)行備份,這是導(dǎo)出用戶的一個(gè)特例。
  • 創(chuàng)建不同計(jì)劃的報(bào)告,以便比較。
  • 將計(jì)劃與主計(jì)劃作比較,這樣開發(fā)人員就可以將他們本地拷貝與主數(shù)據(jù)庫作比較
  • 列出所有的用戶

分析人員和質(zhì)量評(píng)價(jià)人員常常會(huì)去看測試數(shù)據(jù),并且需要改變他們。因此我們用VBA語句開發(fā)一個(gè)Excel應(yīng)用程序,從數(shù)據(jù)庫里面提取數(shù)據(jù)到Excel文件中,允許用戶修改這個(gè)文件,修改后又返回到數(shù)據(jù)庫中去。當(dāng)然,也可以使用其他工具來瀏覽和編輯數(shù)據(jù)庫的內(nèi)容,但是我們使用excel,因?yàn)楹芏嗳耸煜に?/p>

項(xiàng)目組的所有成員應(yīng)該很容易獲取數(shù)據(jù)庫設(shè)計(jì)的詳細(xì)內(nèi)容,從而發(fā)現(xiàn)什么表格可以獲得,以及如何使用這些表格。我們建立了基于HTML的工具,使用servlets來查詢數(shù)據(jù)庫元數(shù)據(jù)。因此開發(fā)人員在添加字段之前,可以先通過搜索表和字段的元數(shù)據(jù)來看一看數(shù)據(jù)庫中有沒有這個(gè)字段。我們使用Erwin建模,將數(shù)據(jù)從Erwin提取到我們的元數(shù)據(jù)表中。

6、結(jié)束語

當(dāng)然,這并不是敏捷方法在數(shù)據(jù)庫設(shè)計(jì)中的全部應(yīng)用,也不是數(shù)據(jù)庫進(jìn)化設(shè)計(jì)的全部,還有集成數(shù)據(jù)庫和24*7小時(shí)實(shí)施以及其他一些沒有解決的問題,數(shù)據(jù)庫進(jìn)化設(shè)計(jì)還需要進(jìn)行進(jìn)一步的研究工作。

【編輯推薦】

  1. 教你如何利用MySQL學(xué)習(xí)MongoDB之SQL語法
  2. 教你如何利用MySQL學(xué)習(xí)MongoDB之?dāng)?shù)據(jù)存儲(chǔ)結(jié)構(gòu)
  3. 如何解決PHP+MySQL出現(xiàn)亂碼的現(xiàn)象
  4. 教你如何利用MySQL學(xué)習(xí)MongoDB之安裝篇
  5. MySQL配置時(shí)提示無法連接到MySQL本地服務(wù)器
責(zé)任編輯:艾婧 來源: 天極網(wǎng)
相關(guān)推薦

2011-03-25 09:37:17

2011-04-12 14:48:38

MySQL數(shù)據(jù)庫

2011-08-11 17:00:33

iPhone數(shù)據(jù)庫SQLite

2011-05-24 10:54:15

數(shù)據(jù)庫重復(fù)數(shù)據(jù)刪除

2011-04-13 15:17:09

數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)

2011-04-15 11:29:31

數(shù)據(jù)庫設(shè)計(jì)

2023-08-01 08:02:06

2010-10-27 17:11:35

oracle查詢

2011-05-12 11:01:07

MySQL數(shù)據(jù)庫緩存

2011-03-07 15:54:30

2011-03-17 17:06:38

數(shù)據(jù)庫發(fā)展方向

2011-08-25 16:13:31

SQL Server批量替換數(shù)據(jù)

2010-04-13 10:15:17

Oracle數(shù)據(jù)庫

2011-03-01 16:00:08

java數(shù)據(jù)庫

2011-06-03 10:50:27

Java

2011-07-21 15:05:14

iPhone 數(shù)據(jù)庫

2011-04-01 09:43:28

SQL Server數(shù)據(jù)庫快照

2011-08-02 15:04:49

2011-03-10 11:12:59

數(shù)據(jù)庫

2009-07-06 10:36:41

敏捷開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)