數(shù)據(jù)庫(kù)開(kāi)發(fā)者常犯的錯(cuò)誤(一)
導(dǎo)讀:雖然軟件發(fā)展過(guò)程中的熱點(diǎn)技術(shù)層出不窮,不斷地變化,但某些東西卻一直未曾改變,其中之一就是開(kāi)發(fā)人員對(duì)數(shù)據(jù)庫(kù)的使用和設(shè)計(jì)開(kāi)發(fā)。你可能會(huì)興奮地緊跟時(shí)尚創(chuàng)建一個(gè)AJAX Web界面,或者使用最近迷人的Windows用戶界面,但是透過(guò)這些各種各樣的外觀界面,你可能依然需要從后臺(tái)數(shù)據(jù)庫(kù)中提取或存取所需要的數(shù)據(jù)——這一點(diǎn)就如同十多年以前人們對(duì)數(shù)據(jù)庫(kù)的操作是一樣的。本文將從開(kāi)發(fā)者的角度出發(fā),介紹幾個(gè)容易犯的錯(cuò)誤,告誡數(shù)據(jù)庫(kù)開(kāi)發(fā)者要注意的問(wèn)題。
然而,令人吃驚的是,目前還有很多開(kāi)發(fā)者依然在不斷地重復(fù)著很多年以前就存在的數(shù)據(jù)庫(kù)使用和開(kāi)發(fā)上的錯(cuò)誤。或許是有太多的開(kāi)發(fā)者只是來(lái)學(xué)習(xí)如何使用一個(gè)數(shù)據(jù)庫(kù),而不是真正的去研究它。以下是筆者作為一個(gè)開(kāi)發(fā)者,個(gè)人在平時(shí)的開(kāi)發(fā)工作中所精選出的數(shù)據(jù)庫(kù)開(kāi)發(fā)者常犯的錯(cuò)誤,
1、選擇了錯(cuò)誤的數(shù)據(jù)庫(kù)
不是所有的數(shù)據(jù)庫(kù)都可以用來(lái)完成你的任務(wù),這意味著當(dāng)你在使用數(shù)據(jù)庫(kù)來(lái)做任何開(kāi)發(fā)工作和其他事情前,你必須選擇合適的數(shù)據(jù)庫(kù)。例如,我們經(jīng)常看到一些Access數(shù)據(jù)庫(kù)沒(méi)有能力處理的大容量數(shù)據(jù)集,對(duì)于SQL Server來(lái)說(shuō)卻像玩小孩子的游戲一樣輕松地完成處理。但是,對(duì)于只需要處理幾百行數(shù)據(jù)的需求,有的人卻花錢來(lái)購(gòu)買SQL Server。這些都是錯(cuò)誤的做法。
廣泛地來(lái)說(shuō),在當(dāng)今市場(chǎng)中的數(shù)據(jù)庫(kù)可以分為三個(gè)層次:桌面和嵌入數(shù)據(jù)庫(kù)——適合于處理小型任務(wù);一些大型數(shù)據(jù)庫(kù)產(chǎn)品的“Express”版也是不錯(cuò)的,可以處理數(shù)G條數(shù)據(jù);而真正的企業(yè)級(jí)數(shù)據(jù)庫(kù),像SQL Server、Oracle和DB2的數(shù)據(jù)處理能力是非常驚人的,你可以毫不猶豫地把數(shù)據(jù)拋給它們。
因此,在你選擇數(shù)據(jù)庫(kù)前,你需要對(duì)于你的數(shù)據(jù)進(jìn)行一次客觀真實(shí)的分析,從而選擇適合你的開(kāi)發(fā)工作和實(shí)際需求的數(shù)據(jù)庫(kù)產(chǎn)品。
2、選擇了太多的數(shù)據(jù)庫(kù)
諸如ODBC、JDBC和OLEDB等應(yīng)用程序編程接口的出現(xiàn),大大促進(jìn)和提升了數(shù)據(jù)庫(kù)獨(dú)立性,也就是說(shuō),開(kāi)發(fā)人員可以這樣來(lái)編寫你的應(yīng)用程序:你可以讓你的應(yīng)用程序支持使用任何數(shù)據(jù)庫(kù)來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)。
然而,這種情況是要付出一些代價(jià)的,我曾經(jīng)看到有的開(kāi)發(fā)團(tuán)隊(duì)為了追求應(yīng)用程序的數(shù)據(jù)庫(kù)“無(wú)關(guān)性”,專門編寫了應(yīng)用程序?qū)⑺械腟QL語(yǔ)句轉(zhuǎn)換成一些底層的語(yǔ)言,以便讓所有的數(shù)據(jù)庫(kù)都能理解并執(zhí)行,但是,這樣做的同時(shí)也喪失了現(xiàn)有數(shù)據(jù)庫(kù)的一些高級(jí)功能。
那么為什么這么做呢?可能是出于這樣的考慮:某些客戶在將來(lái)的使用中可能想切換到Oracle或DB2或FoxPro,或其他的什么數(shù)據(jù)庫(kù),采用上面的這種做法或許是現(xiàn)在先準(zhǔn)備好了,“未雨綢繆”。
對(duì)于此,另一種相反的做法是:當(dāng)你開(kāi)始開(kāi)發(fā)一個(gè)新產(chǎn)品的時(shí)候,選擇一個(gè)存儲(chǔ)引擎并開(kāi)始在此基礎(chǔ)上編寫你的應(yīng)用程序。如果你的產(chǎn)品足夠好,人們會(huì)安裝你指定的數(shù)據(jù)庫(kù),因此你不用浪費(fèi)時(shí)間和精力來(lái)支持一種“假想”的用戶需求。
3、了解你的數(shù)據(jù)
在我們使用數(shù)據(jù)庫(kù)的過(guò)程中會(huì)碰到很多需要考慮的問(wèn)題,例如有些客戶編號(hào)可能并不是我們通常認(rèn)為的七位,而是六位;而有一些公司和企業(yè)出于保護(hù)個(gè)人隱私的考慮,可能不一定非要求員工輸入他們的身份證號(hào)碼或者銀行帳號(hào),因此這中數(shù)據(jù)類型在數(shù)據(jù)庫(kù)搭建和開(kāi)發(fā)中必須設(shè)置成可以為空(NULL)。
也就是說(shuō),數(shù)據(jù)庫(kù)開(kāi)發(fā)和設(shè)計(jì)不能脫離實(shí)際情況進(jìn)行,不能遠(yuǎn)離實(shí)際業(yè)務(wù)規(guī)則。對(duì)數(shù)據(jù)庫(kù)開(kāi)發(fā)者來(lái)說(shuō),必須要完全了解用戶真正輸入數(shù)據(jù)的需求是什么,并根據(jù)這些數(shù)據(jù)來(lái)合理地設(shè)計(jì)數(shù)據(jù)字段的大小、類型以及什么規(guī)則,等等。否則,等待你的將是一次又一次地返回頭來(lái)進(jìn)行修改工作。因此,你要學(xué)會(huì)在開(kāi)始的時(shí)候就對(duì)你需要處理的數(shù)據(jù)具有非常全面、深入的了解,要盡量考慮到各種意外的情況。
4、數(shù)據(jù)庫(kù)不像Excel一樣人人會(huì)用
現(xiàn)在有一種認(rèn)識(shí)上的誤區(qū),尤其是在一些小單位的管理者眼中,他們總認(rèn)為任何開(kāi)發(fā)者都知道如何去合理地搭建一個(gè)數(shù)據(jù)庫(kù)。
很明顯,這種誤解讓我很困惑。既然你不會(huì)假定任何開(kāi)發(fā)者都知道如何用C#編程或創(chuàng)建一個(gè)Web服務(wù),那么為什么要假定每個(gè)開(kāi)發(fā)者都是數(shù)據(jù)庫(kù)專家呢?
這種假設(shè)所帶來(lái)的最后結(jié)果是,太多的數(shù)據(jù)庫(kù)被一些甚至從來(lái)沒(méi)有聽(tīng)說(shuō)過(guò)術(shù)語(yǔ)規(guī)范化(term normalization)的人所設(shè)計(jì)。很多數(shù)據(jù)庫(kù)的功能根本沒(méi)有被合理地運(yùn)用,如果你是這樣一個(gè)開(kāi)發(fā)者的話,那么在你設(shè)計(jì)數(shù)據(jù)庫(kù)之前,你需要加強(qiáng)這方面的培訓(xùn)和學(xué)習(xí)了。高效的數(shù)據(jù)庫(kù)設(shè)計(jì)是你必須了解和掌握的技巧,而不要奢望可以通過(guò)失敗的教訓(xùn)來(lái)了解到這一點(diǎn)。
以上就是我要為大家介紹的易犯錯(cuò)誤類型,希望大家在以后的開(kāi)發(fā)工作中注意,避免這些錯(cuò)誤的發(fā)生,來(lái)提高開(kāi)發(fā)工作的工作質(zhì)量,很高興跟大家分享 ,希望對(duì)大家有所幫助。
【編輯推薦】