真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java編輯代碼在線測(cè)試 java 代碼測(cè)試

赴日程序員的JAVA之路?

JAVA學(xué)習(xí)之路:不走彎路,就是捷徑(轉(zhuǎn)載)

成都創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、新洲網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為新洲等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

引言

軟件開發(fā)之路是充滿荊棘與挑戰(zhàn)之路,也是充滿希望之路。Java學(xué)習(xí)也是如此,沒有捷徑可走。夢(mèng)想像《天龍八部》中虛竹一樣被無(wú)崖子醍醐灌頂而輕松獲得一甲子功力,是很不現(xiàn)實(shí)的。每天仰天大叫"天神啊,請(qǐng)賜給我一本葵花寶典吧",殊不知即使你獲得了葵花寶典,除了受自宮其身之苦外,你也不一定成得了"東方不敗",倒是成"西方失敗"的幾率高一點(diǎn)。

"不走彎路,就是捷徑",佛經(jīng)說(shuō)的不無(wú)道理。

1.如何學(xué)習(xí)程序設(shè)計(jì)?

Java是一種平臺(tái),也是一種程序設(shè)計(jì)語(yǔ)言,如何學(xué)好程序設(shè)計(jì)不僅僅適用于Java,對(duì)C++等其他程序設(shè)計(jì)語(yǔ)言也一樣管用。有編程高手認(rèn)為,Java也好C也好沒什么分別,拿來(lái)就用。為什么他們能達(dá)到如此境界?我想是因?yàn)榫幊陶Z(yǔ)言之間有共通之處,領(lǐng)會(huì)了編程的精髓,自然能夠做到一通百通。如何學(xué)習(xí)程序設(shè)計(jì)理所當(dāng)然也有許多共通的地方。

1.1 培養(yǎng)興趣

興趣是能夠讓你堅(jiān)持下去的動(dòng)力。如果只是把寫程序作為謀生的手段的話,你會(huì)活的很累,也太對(duì)不起自己了。多關(guān)心一些行業(yè)趣事,多想想蓋茨。不是提倡天天做白日夢(mèng),但人要是沒有了夢(mèng)想,你覺得有味道嗎?可能像許多深圳本地農(nóng)民一樣,打打麻將,喝喝功夫茶,拜拜財(cái)神爺;每個(gè)月就有幾萬(wàn)十幾萬(wàn)甚至更多的進(jìn)帳,憑空多出個(gè)"食利階層"。你認(rèn)為,這樣有味道嗎?有空多到一些程序員論壇轉(zhuǎn)轉(zhuǎn),你會(huì)發(fā)現(xiàn),他們其實(shí)很樂觀幽默,時(shí)不時(shí)會(huì)冒出智慧的火花。

1.2 慎選程序設(shè)計(jì)語(yǔ)言

男怕入錯(cuò)行,女怕嫁錯(cuò)郎。初學(xué)者選擇程序設(shè)計(jì)語(yǔ)言需要謹(jǐn)慎對(duì)待。軟件開發(fā)不僅僅是掌握一門編程語(yǔ)言了事,它還需要其他很多方面的背景知識(shí)。軟件開發(fā)也不僅僅局限于某幾個(gè)領(lǐng)域,而是已經(jīng)滲透到了各行各業(yè)幾乎每一個(gè)角落。

如果你對(duì)硬件比較感興趣,你可以學(xué)習(xí)C語(yǔ)言/匯編語(yǔ)言,進(jìn)入硬件開發(fā)領(lǐng)域。如果你對(duì)電信的行業(yè)知識(shí)及網(wǎng)絡(luò)比較熟悉,你可以在C/C++等之上多花時(shí)間,以期進(jìn)入電信軟件開發(fā)領(lǐng)域。如果你對(duì)操作系統(tǒng)比較熟悉,你可以學(xué)習(xí)C/Linux等等,為L(zhǎng)inux內(nèi)核開發(fā)/驅(qū)動(dòng)程序開發(fā)/嵌入式開發(fā)打基礎(chǔ)。

如果你想介入到應(yīng)用范圍最廣泛的應(yīng)用軟件開發(fā)(包括電子商務(wù)電子政務(wù)系統(tǒng))的話,你可以選擇J2EE或.NET,甚至LAMP組合。每個(gè)領(lǐng)域要求的背景知識(shí)不一樣。做應(yīng)用軟件需要對(duì)數(shù)據(jù)庫(kù)等很熟悉??傊?,你需要根據(jù)自己的特點(diǎn)來(lái)選擇合適你的編程語(yǔ)言。

1.3 要腳踏實(shí)地,快餐式的學(xué)習(xí)不可取

先分享一個(gè)故事。

有一個(gè)小朋友,他很喜歡研究生物學(xué),很想知道那些蝴蝶如何從蛹?xì)だ锍鰜?lái),變成蝴蝶便會(huì)飛。有一次,他走到草原上面看見一個(gè)蛹,便取了回家,然后看著,過(guò)了幾天以后,這個(gè)蛹出了一條裂痕,看見里面的蝴蝶開始掙扎,想抓破蛹?xì)わw出來(lái)。 這個(gè)過(guò)程達(dá)數(shù)小時(shí)之久,蝴蝶在蛹里面很辛苦地拼命掙扎,怎么也沒法子走出來(lái)。這個(gè)小孩看著看著不忍心,就想不如讓我?guī)蛶退?,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。 但蝴蝶出來(lái)以后,因?yàn)槌岚虿粔蛄?,變得很臃腫,飛不起來(lái)。

這個(gè)故事給我們的啟示是:欲速則不達(dá)。

浮躁是現(xiàn)代人最普遍的心態(tài),能怪誰(shuí)?也許是貧窮落后了這么多年的緣故,就像當(dāng)年的大躍進(jìn)一樣,都想大步跨入***主義社會(huì)。現(xiàn)在的軟件公司、客戶、政府、學(xué)校、培訓(xùn)機(jī)構(gòu)等等到處彌漫著浮躁之氣。就拿我比較熟悉的大連大工IT職業(yè)培訓(xùn)來(lái)說(shuō)吧,居然打廣告宣稱"20多年的計(jì)算機(jī)職業(yè)教育,遼寧省十佳學(xué)校",殊不知中國(guó)計(jì)算機(jī)發(fā)展才幾年,軟件發(fā)展才幾年,居然去報(bào)名的學(xué)生不少,簡(jiǎn)直是藐視天下程序員。培訓(xùn)出來(lái)的“程序員”大多不知道OO,OP為何物?社會(huì)環(huán)境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。許多初學(xué)者C++/Java沒開始學(xué),立馬使用VC/JBuilder,會(huì)使用VC/JBuilder開發(fā)一個(gè)Hello World程序,就忙不迭的向世界宣告,"我會(huì)軟件開發(fā)了",簡(jiǎn)歷上也大言不慚地寫上"精通VC/Java"。結(jié)果到軟件公司面試時(shí)要么被三兩下打發(fā)走了,要么被駁的體無(wú)完膚,無(wú)地自容。到處碰壁之后才知道捧起《C++編程思想》《Java編程思想》仔細(xì)鉆研,早知如此何必當(dāng)初呀。

"你現(xiàn)在講究簡(jiǎn)單方便,你以后的路就長(zhǎng)了",好象也是佛經(jīng)中的勸戒。

1.4 多實(shí)踐,快實(shí)踐

彭端淑的《為學(xué)一首示子侄》中有窮和尚與富和尚的故事。

從前,四川邊境有兩個(gè)和尚,一個(gè)貧窮,一個(gè)有錢。一天,窮和尚對(duì)富和尚說(shuō):"我打算去南海朝圣,你看怎么樣?"富和尚說(shuō):"這里離南海有幾千里遠(yuǎn),你靠什么去呢?"窮和尚說(shuō):"我只要一個(gè)水缽,一個(gè)飯碗就夠了。"富和尚為難地說(shuō):"幾年前我就打算買條船去南海,可至今沒去成,你還是別去吧!" 一年以后,富和尚還在為租賃船只籌錢,窮和尚卻已經(jīng)從南海朝圣回來(lái)了。

這個(gè)故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準(zhǔn)備周全之后,再去干事情。假如事情準(zhǔn)備考慮周全了再上路的話,別人恐怕捷足先登了。軟件開發(fā)是一門工程學(xué)科,注重的就是實(shí)踐,"君子動(dòng)口不動(dòng)手"對(duì)軟件開發(fā)人員來(lái)講根本就是錯(cuò)誤的,他們提倡"動(dòng)手至上",但別害怕,他們大多溫文爾雅,沒有暴力傾向,雖然有時(shí)候蓬頭垢面的一副"比爾蓋茨"樣。有前輩高人認(rèn)為,學(xué)習(xí)編程的秘訣是:編程、編程、再編程,筆者深表贊同。不僅要多實(shí)踐,而且要快實(shí)踐。我們?cè)诳磿臅r(shí)候,不要等到你完全理解了才動(dòng)手敲代碼,而是應(yīng)該在看書的同時(shí)敲代碼,程序運(yùn)行的各種情況可以讓你更快更牢固的掌握知識(shí)點(diǎn)。

1.5 多參考程序代碼

程序代碼是軟件開發(fā)最重要的成果之一,其中滲透了程序員的思想與靈魂。許多人被《仙劍奇?zhèn)b傳》中凄美的愛情故事感動(dòng),悲劇的結(jié)局更有一種缺憾美。為什么要以悲劇結(jié)尾?據(jù)說(shuō)是因?yàn)閷憽断蓜ζ鎮(zhèn)b傳》的程序員失戀而安排了這樣的結(jié)局,他把自己的感覺融入到游戲中,卻讓眾多的仙劍迷扼腕嘆息。

多多參考代碼例子,對(duì)Java而言有參考文獻(xiàn)[4.3],有API類的源代碼(JDK安裝目錄下的src.zip文件),也可以研究一些開源的軟件或框架。

1.6 加強(qiáng)英文閱讀能力

對(duì)學(xué)習(xí)編程來(lái)說(shuō),不要求英語(yǔ), 但不能一點(diǎn)不會(huì),。最起碼像Java API文檔(參考文獻(xiàn)[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開啟一個(gè)"金山詞霸"??炊嗔司蜁?huì)越來(lái)越熟練。在學(xué)Java的同時(shí)學(xué)習(xí)英文,一箭雙雕多好。另外好多軟件需要到英文網(wǎng)站下載,你要能夠找到它們,這些是最基本的要求。英語(yǔ)好對(duì)你學(xué)習(xí)有很大的幫助??谡Z(yǔ)好的話更有機(jī)會(huì)進(jìn)入管理層,進(jìn)而可以成為剝削程序員的"周扒皮"。

1.7 萬(wàn)不得已才請(qǐng)教別人

筆者在Martix與Java論壇的在線輔導(dǎo)系統(tǒng)中解決學(xué)生問題時(shí)發(fā)現(xiàn),大部分的問題學(xué)生稍做思考就可以解決。請(qǐng)教別人之前,你應(yīng)該先回答如下幾個(gè)問題。

你是否在google中搜索了問題的解決辦法?

你是否查看了Java API文檔?

你是否查找過(guò)相關(guān)書籍?

你是否寫代碼測(cè)試過(guò)?

如果回答都是"是"的話,而且還沒有找到解決辦法,再問別人不遲。要知道獨(dú)立思考的能力對(duì)你很重要。要知道程序員的時(shí)間是很寶貴的。

1.8 多讀好書

書中自有顏如玉。比爾蓋茨是一個(gè)飽讀群書的人。雖然沒有讀完大學(xué),但九歲的時(shí)候比爾蓋茨就已經(jīng)讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學(xué)科,可以說(shuō)比爾?茨不僅是當(dāng)今世界上金錢的首富,而且也可以稱得上是知識(shí)的巨富。

筆者在給學(xué)生上課的時(shí)候經(jīng)常會(huì)給他們推薦書籍,到后來(lái)學(xué)生實(shí)在忍無(wú)可忍開始抱怨,"天吶,這么多書到什么時(shí)候才能看完了","學(xué)軟件開發(fā),感覺上了賊船"。這時(shí)候,我的回答一般是,"別著急,什么時(shí)候帶你們?nèi)タ纯次业臅浚浆F(xiàn)在每月花在技術(shù)書籍上的錢400元,這在軟件開發(fā)人員之中還只能夠算是中等的",學(xué)生當(dāng)場(chǎng)暈倒。(注:這一部分學(xué)生是剛學(xué)軟件開發(fā)的)

1.9 使用合適的工具

工欲善其事必先利其器。軟件開發(fā)包含各種各樣的活動(dòng),需求收集分析、建立用例模型、建立分析設(shè)計(jì)模型、編程實(shí)現(xiàn)、調(diào)試程序、自動(dòng)化測(cè)試、持續(xù)集成等等,沒有工具幫忙可以說(shuō)是寸步難行。工具可以提高開發(fā)效率,使軟件的質(zhì)量更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無(wú)招勝有招,手中無(wú)劍心中有劍這樣的境界幾乎不可企及。

2.軟件開發(fā)學(xué)習(xí)路線

兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進(jìn)也不保守并非中庸之道,而是找尋學(xué)習(xí)軟件開發(fā)的正確路線與規(guī)律。

從軟件開發(fā)人員的生涯規(guī)劃來(lái)講,我們可以大致分為三個(gè)階段,軟件工程師→軟件設(shè)計(jì)師→架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師。不想當(dāng)元帥的士兵不是好士兵,不想當(dāng)架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師的程序員也不是好的程序員。我們應(yīng)該努力往上走。讓我們先整理一下開發(fā)應(yīng)用軟件需要學(xué)習(xí)的主要技術(shù)。

A.基礎(chǔ)理論知識(shí),如操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)原理等,它們并非不重要。如不想成為計(jì)算機(jī)科學(xué)家的話,可以采取"用到的時(shí)候再來(lái)學(xué)"的原則。

B.一門編程語(yǔ)言,現(xiàn)在基本上都是面向?qū)ο蟮恼Z(yǔ)言,Java/C++/C#等等。如果做WEB開發(fā)的話還要學(xué)習(xí)HTML/javascript等等。

C.一種方法學(xué)或者說(shuō)思想,現(xiàn)在基本都是面向?qū)ο笏枷耄∣OA/OOD/設(shè)計(jì)模式)。由此而衍生的基于組件開發(fā)CBD/面向方面編程AOP等等。

D.一種關(guān)系型數(shù)據(jù)庫(kù),ORACLE/SqlServer/DB2/MySQL等等

E.一種提高生產(chǎn)率的IDE集成開發(fā)環(huán)境JBuilder/Eclipse/VS.NET等。

F.一種UML建模工具,用ROSE/VISIO/鋼筆進(jìn)行建模。

G.一種軟件過(guò)程,RUP/XP/CMM等等,通過(guò)軟件過(guò)程來(lái)組織軟件開發(fā)的眾多活動(dòng),使開發(fā)流程專業(yè)化規(guī)范化。當(dāng)然還有其他的一些軟件工程知識(shí)。

H.項(xiàng)目管理、體系結(jié)構(gòu)、框架知識(shí)。

正確的路線應(yīng)該是:B→C→E→F→G→H。

還需要補(bǔ)充幾點(diǎn):

1).對(duì)于A與C要補(bǔ)充的是,我們應(yīng)該在實(shí)踐中逐步領(lǐng)悟編程理論與編程思想。新技術(shù)雖然不斷涌現(xiàn),更新速度令人眼花燎亂霧里看花;但萬(wàn)變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會(huì)有撥云見日之感。面向?qū)ο蟮乃枷朐谀壳皝?lái)講是相當(dāng)關(guān)鍵的,是強(qiáng)勢(shì)技術(shù)之一,在上面需要多投入時(shí)間,給你的回報(bào)也會(huì)讓你驚喜。

2).對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō)是獨(dú)立學(xué)習(xí)的,這個(gè)時(shí)機(jī)就由你來(lái)決定吧。

3).編程語(yǔ)言作為學(xué)習(xí)軟件開發(fā)的主線,而其余的作為輔線。

4).軟件工程師著重于B、C、E、D;軟件設(shè)計(jì)師著重于B、C、E、D、F;架構(gòu)設(shè)計(jì)師著重于C、F、H。

3.如何學(xué)習(xí)Java?

3.1 Java學(xué)習(xí)路線

3.1.1 基礎(chǔ)語(yǔ)法及Java原理

基礎(chǔ)語(yǔ)法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險(xiǎn)的。學(xué)習(xí)Java也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個(gè)好方法,原因之一是為了對(duì)得起你交的1200大洋考試費(fèi),你會(huì)更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識(shí);但是你千萬(wàn)不要認(rèn)為考過(guò)了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險(xiǎn)的。獲得"真正"的SCJP只能證明你的基礎(chǔ)還過(guò)得去,但離實(shí)際開發(fā)還有很長(zhǎng)的一段路要走。

3.1.2 OO思想的領(lǐng)悟

掌握了基礎(chǔ)語(yǔ)法和Java程序運(yùn)行原理后,我們就可以用Java語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓?。面向?qū)ο?,是一種方法學(xué);是獨(dú)立于語(yǔ)言之外的編程思想;是CBD基于組件開發(fā)的基礎(chǔ);屬于強(qiáng)勢(shì)技術(shù)之一。當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z(yǔ)言的時(shí)候,你會(huì)感到特別的熟悉親切,學(xué)起來(lái)像喝涼水這么簡(jiǎn)單。

使用面向?qū)ο蟮乃枷脒M(jìn)行開發(fā)的基本過(guò)程是:

●調(diào)查收集需求。

●建立用例模型。

●從用例模型中識(shí)別分析類及類與類之間的靜態(tài)動(dòng)態(tài)關(guān)系,從而建立分析模型。

●細(xì)化分析模型到設(shè)計(jì)模型。

●用具體的技術(shù)去實(shí)現(xiàn)。

●測(cè)試、部署、總結(jié)。

3.1.3 基本API的學(xué)習(xí)

進(jìn)行軟件開發(fā)的時(shí)候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說(shuō)的"不需要重新發(fā)明輪子"。我們可以利用現(xiàn)成的類、組件、框架來(lái)搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過(guò)來(lái)的JAR文件中包含的類,我們可以調(diào)用類中的方法來(lái)完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個(gè)數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國(guó)際長(zhǎng)途甚至飄洋過(guò)海來(lái)告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說(shuō)是程序員與程序員交流的文檔。

基本API指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸出等等。我們又把它成為類庫(kù)。熟悉API的方法一是多查Java DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。

3.1.4 特定API的學(xué)習(xí)

Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對(duì)一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟悉Servlet等API啦。總之,需要根據(jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。

3.1.5 開發(fā)工具的用法

在學(xué)習(xí)基礎(chǔ)語(yǔ)法與基本的面向?qū)ο蟾拍顣r(shí),從鍛煉語(yǔ)言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時(shí)候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過(guò)于關(guān)注IDE的強(qiáng)大功能而分散對(duì)Java技術(shù)本身的注意力。過(guò)了這一階段你就可以開始熟悉IDE了。

程序員日常工作包括很多活動(dòng),編輯、編譯及構(gòu)建、調(diào)試、單元測(cè)試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動(dòng)都有專門的工具,如果獨(dú)立使用這些工具的話,你將會(huì)很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯(cuò)。在JBuilder、Eclipse等IDE中已經(jīng)自動(dòng)集成編輯器、編譯器、調(diào)試器、單元測(cè)試工具JUnit、自動(dòng)構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應(yīng)該說(shuō)IDE發(fā)展的趨勢(shì)就是集成軟件開發(fā)中要用到的幾乎所有工具。

從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個(gè)學(xué)生到一個(gè)職業(yè)程序員轉(zhuǎn)變的里程碑。

Java開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場(chǎng)份額是最大的。JBuilder在近幾年來(lái)一直是Java集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。IBM在Visual Age for Java上已經(jīng)無(wú)利可圖之下,干脆將之貢獻(xiàn)給開源社區(qū),成為Eclipse的前身,真所謂"柳暗花明又一村"。浴火重生的Eclipse以其開放式的插件擴(kuò)展機(jī)制、免費(fèi)開源獲得廣大程序員(包括幾乎所有的骨灰級(jí)程序員)的青睞,極具發(fā)展?jié)摿Α?/p>

3.1.6 學(xué)習(xí)軟件工程

對(duì)小型項(xiàng)目而言,你可能認(rèn)為軟件工程沒太大的必要。隨著項(xiàng)目的復(fù)雜性越來(lái)越高,軟件工程的必要性才會(huì)體現(xiàn)出來(lái)。參見"軟件開發(fā)學(xué)習(xí)路線"小節(jié)。

3.2學(xué)習(xí)要點(diǎn)

確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過(guò),只是筆者覺得這些地方特別要注意才對(duì)它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。

3.2.1勤查API文檔

當(dāng)程序員編寫好某些類,覺得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。這時(shí)候你要使用"Javadoc"工具(包含在JDK中)生成標(biāo)準(zhǔn)的Java DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:,你可以到google搜索CHM版本下載。也可以在線查看:。

對(duì)待DOC文檔要像毛主席語(yǔ)錄,早上起床念一遍,吃飯睡覺前念一遍。

當(dāng)需要某項(xiàng)功能的時(shí)候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時(shí)候才考慮自己實(shí)現(xiàn)。使用步驟一般如下:

●找特定的包,包一般根據(jù)功能組織。

●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。

●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對(duì)象。

●選擇你需要的方法。

3.2.2 查書/google-寫代碼測(cè)試-查看源代碼-請(qǐng)教別人

當(dāng)我們遇到問題的時(shí)候該如何解決?

這時(shí)候不要急著問別人,太簡(jiǎn)單的問題,沒經(jīng)過(guò)思考的問題,別人會(huì)因此而瞧不起你??梢韵日艺視絞oogle中搜一下看看,絕大部分問題基本就解決了。而像"某些類/方法如何使用的問題",DOC文檔就是答案。對(duì)某些知識(shí)點(diǎn)有疑惑是,寫代碼測(cè)試一下,會(huì)給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗(yàn)證你的想法。萬(wàn)不得已才去請(qǐng)教別人。

3.2.3學(xué)習(xí)開源軟件的設(shè)計(jì)思想

Java領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對(duì)這些工具、框架進(jìn)行分析,領(lǐng)會(huì)其中的設(shè)計(jì)思想,有朝一日說(shuō)不定你也能寫一個(gè)XXX框架什么的,風(fēng)光一把。分析開源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。

3.2.4 規(guī)范的重要性

沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。第二層含義是編程規(guī)范,如果你使用了大量的獨(dú)特算法,富有個(gè)性的變量及方法的命名方式;同時(shí),沒給程序作注釋,以顯示你的編程功底是多么的深厚。這樣的代碼別人看起來(lái)像天書,要理解談何容易,更不用說(shuō)維護(hù)了,必然會(huì)被無(wú)情地掃入垃圾堆。Java編碼規(guī)范到此查看或下載,中文的也有,啊,還要問我在哪,請(qǐng)參考3.2.2節(jié)。

3.2.5 不局限于Java

很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒時(shí)間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。

Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)技術(shù)等知識(shí),用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會(huì)更有效。如學(xué)習(xí)Java集合的時(shí)候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時(shí)候復(fù)習(xí)數(shù)據(jù)庫(kù)技術(shù);采取的依然是"需要的時(shí)候再學(xué)"的原則。

4.結(jié)束語(yǔ)

需要強(qiáng)調(diào)的是,學(xué)習(xí)軟件開發(fā)確實(shí)有一定的難度,也很辛苦,需要付出很多努力,但千萬(wàn)不要半途而廢。本文如果能對(duì)一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來(lái)老氣橫秋呀?沒辦法,在電腦的長(zhǎng)期輻射之下,都快變成小老頭了。最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報(bào)》報(bào)道,電腦輻射會(huì)在白皙的皮膚上面點(diǎn)綴一些小黑點(diǎn),看起來(lái)鮮艷無(wú)比…… (文章提到的大連大工IT培訓(xùn)。本人沒有任何攻擊的意思)

誰(shuí)可以告訴我md5加密原理

2004年,已經(jīng)被山東大學(xué)的王小云教授破解了。

以下是她在國(guó)際密碼學(xué)會(huì)上發(fā)表的破解原理論文。

Collisions for Hash Functions

Collisions for Hash Functions

MD4, MD5, HAVAL-128 and RIPEMD

Xiaoyun Wang1, Dengguo Feng2, Xuejia Lai3, Hongbo Yu1

The School of Mathematics and System Science, Shandong University, Jinan250100, China1

Institute of Software, Chinese Academy of Sciences, Beijing100080, China2

Dept. of Computer Science and Engineering, Shanghai Jiaotong University, Shanghai, China3

xywang@sdu.edu.cn1

revised on August 17, 2004

1 Collisions for MD5

MD5 is the hash function designed by Ron Rivest [9] as a strengthened version of MD4 [8]. In 1993 Bert den

Boer and Antoon Bosselaers [1] found pseudo-collision for MD5 which is made of the same message with two

different sets of initial value. H. Dobbertin[3] found a free-start collision which consists of two different 512-bit

messages with a chosen initial value 0 V I .

ED BA x C B F x C B AC x A V I 763 4 0 D , 97 62 5 0 , 341042 3 0x B , 2375 12 0 : 0 0 0 0 0

Our attack can find many real collisions which are composed of two 1024-bit messages with the original

initial value 0 IV of MD5:

10325476 0 , 98 0 , 89 0 67452301 0 : 0 0 0 0 0 x D badcfe x C xefcdab ,B x A IV

) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 31

1 1 C C M M

) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 31

2 2 C C N N i i

(non-zeros at position 4,11 and 14)

such that

) , ( 5 ) , ( 5 i i N M MD N M MD .

On IBM P690, it takes about one hour to find such M and M , after that, it takes only 15 seconds to 5

minutes to find i N and i N , so that ) , ( i N M and ) , ( i N M will produce the same hash same value. Moreover,

our attack works for any given initial value.

The following are two pairs of 1024-bit messages producing collisions, the two examples have the same 1-st

half 512 bits.

M

2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780

X1

N1

d11d0b96 9c7b41dc f497d8e4 d555655a c79a7335 cfdebf0 66f12930 8fb109d1

797f2775 eb5cd530 baade822 5c15cc79 ddcb74ed 6dd3c55f d80a9bb1 e3a7cc35

M0

2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780

X1

N1

d11d0b96 9c7b41dc f497d8e4 d555655a 479a7335 cfdebf0 66f12930 8fb109d1

797f2775 eb5cd530 baade822 5c154c79 ddcb74ed 6dd3c55f 580a9bb1 e3a7cc35

H 9603161f f41fc7ef 9f65ffbc a30f9dbf

M

2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780

X2

N2

313e82d8 5b8f3456 d4ac6dae c619c936 b4e253dd fd03da87 6633902 a0cd48d2

42339fe9 e87e570f 70b654ce 1e0da880 bc2198c6 9383a8b6 2b65f996 702af76f

M0

2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780

313e82d8 5b8f3456 d4ac6dae c619c936 34e253dd fd03da87 6633902 a0cd48d2

42339fe9 e87e570f 70b654ce 1e0d2880 bc2198c6 9383a8b6 ab65f996 702af76f

H 8d5e7019 6324c015 715d6b58 61804e08

Table 1 Two pairs of collisions for MD5

2 Collisions for HAVAL-128

HAVAL is proposed in [10]. HAVAL is a hashing algorithm that can compress messages of any length in 3,4

or 5 passes and produce a fingerprint of length 128, 160, 192 or 224 bits.

Attack on a reduced version for HAVAL was given by P. R. Kasselman and W T Penzhorn [7], which

consists of last rounds for HAVAL-128. We break the full HAVAL-128 with only about the 26 HAVAL

computations. Here we give two examples of collisions of HAVAL-128, where

) 0 ,..., 0 , 2 ,.... 2 , 0 , 0 , 0 , 2 ( , 8 12 1 i i i C C M M

with non-zeros at position 0,11,18, and 31 ,... 2 , 1 , 0 i , such that ) ( ) ( M HAVAL M HAVAL .

M1

6377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f

a67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36

38183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632

fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87

M1

6377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f

a67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36

38183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632

fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87

H 95b5621c ca62817a a48dacd8 6d2b54bf

M2

6377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f

a67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36

38183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632

fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b16963

6377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f

a67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36

38183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632

fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b16963

H b0e99492 d64eb647 5149ef30 4293733c

Table 2 Two pairs of collision, where i=11 and these two examples differ only at the last word

3 Collisions for MD4

MD4 is designed by R. L. Rivest[8] . Attack of H. Dobbertin in Eurocrypto'96[2] can find collision with

probability 1/222. Our attack can find collision with hand calculation, such that

) 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 2 , 2 , 0 ( , 16 31 28 31 C C M M

and ) ( 4 ) ( 4 M MD M MD .

M1

4d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f

c69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 2794bf08 b9e8c3e9

M1

4d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f

c69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 2794bf08 b9e8c3e9

H 5f5c1a0d 71b36046 1b5435da 9b0d807a

M2

4d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f

c69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 f713c240 a7b8cf69

4d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f

c69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 f713c240 a7b8cf69

H e0f76122 c429c56c ebb5e256 b809793

Table 3 Two pairs of collisions for MD4

4 Collisions for RIPEMD

RIPEMD was developed for the RIPE project (RACE Integrrity Primitives Evalustion, 1988-1992). In

1995, H. Dobbertin proved that the reduced version RIPEMD with two rounds is not collision-free[4]. We show

that the full RIPEMD also isnOt collision-free. The following are two pairs of collisions for RIPEMD:

) 2 , 0 , 0 , 0 , 0 , 2 2 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 ( , 31 31 18 20 ' C C M M i i

M1

579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911

bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 817104ff 264758a8 61064ea5

M1

579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911

bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 817104ff 264758a8 e1064ea5

H 1fab152 1654a31b 7a33776a 9e968ba7

M2

579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911

bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 e70c66b6

579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911

bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 670c66b6

H 1f2c159f 569b31a6 dfcaa51a 25665d24

Table 4 The collisions for RIPEMD

5 Remark

Besides the above hash functions we break, there are some other hash functions not having ideal security. For

example, collision of SHA-0 [6] can be found with about 240 computations of SHA-0 algorithms, and a collision

for HAVAL-160 can be found with probability 1/232.

Note that the messages and all other values in this paper are composed of 32-bit words, in each 32-bit word

the most left byte is the most significant byte.

1 B. den Boer, Antoon Bosselaers, Collisions for the Compression Function of MD5, Eurocrypto,93.

2 H. Dobbertin, Cryptanalysis of MD4, Fast Software Encryption, LNCS 1039, D. , Springer-Verlag, 1996.

3 H. Dobbertin, Cryptanalysis of MD5 compress, presented at the rump session of EurocrZpt'96.

4 Hans Dobbertin, RIPEMD with Two-round Compress Function is Not Collision-Free, J. Cryptology 10(1),

1997.

5 H. Dobbertin, A. Bosselaers, B. Preneel, "RIPMEMD-160: A Strengthened Version of RIPMMD," Fast

Software EncrZption, LNCS 1039, D.Gollmann, Ed., Springer-Verlag, 1996, pp. 71-82.

6 FIPS 180-1, Secure hash standard, NIST, US Department of Commerce, Washington D. C., April 1995.

7 P. R. Kasselman, W T Penzhorn , Cryptananlysis od reduced version of HAVAL, Vol. 36, No. 1, Electronic

Letters, 2000.

8 R. L. Rivest, The MD4 Message Digest Algorithm, Request for Comments (RFC)1320, Internet Activities

Board, Internet Privacy Task Force, April 1992.

9 R. L Rivest, The MD5 Message Digest Algorithm, Request for Comments (RFC)1321, Internet Activities

Board, Internet PrivacZ Task Force, April 1992.3RIPEMD-1281

10 Y. Zheng, J. Pieprzyk, J. Seberry, HAVAL--A One-way Hashing Algorithm with Variable Length of Output,

Auscrypto'92.

java編程: 1.用遞歸方法編寫:用java語(yǔ)言寫! 輸出如下所示: 1 1 2 1 1 2 3 2 1 的代碼幫我寫下!

理最有效的手段。

數(shù)據(jù)庫(kù)設(shè)計(jì)是指:對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),有效存儲(chǔ)數(shù)據(jù),滿足用戶信息要求和處理要求。

數(shù)據(jù)庫(kù)設(shè)計(jì)的各階段:

A、需求分析階段:綜合各個(gè)用戶的應(yīng)用需求(現(xiàn)實(shí)世界的需求)。

B、在概念設(shè)計(jì)階段:形成獨(dú)立于機(jī)器和各DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來(lái)描述。

C、在邏輯設(shè)計(jì)階段:將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫(kù)產(chǎn)品支持的數(shù)據(jù)模型,如關(guān)系模型,形成數(shù)據(jù)庫(kù)邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(VIEW)形成數(shù)據(jù)的外模式。

D、在物理設(shè)計(jì)階段:根據(jù)DBMS特點(diǎn)和處理的需要,進(jìn)行物理存儲(chǔ)安排,設(shè)計(jì)索引,形成數(shù)據(jù)庫(kù)內(nèi)模式。

1. 需求分析階段

需求收集和分析,結(jié)果得到數(shù)據(jù)字典描述的數(shù)據(jù)需求(和數(shù)據(jù)流圖描述的處理需求)。

需求分析的重點(diǎn):調(diào)查、收集與分析用戶在數(shù)據(jù)管理中的信息要求、處理要求、安全性與完整性要求。

需求分析的方法:調(diào)查組織機(jī)構(gòu)情況、各部門的業(yè)務(wù)活動(dòng)情況、協(xié)助用戶明確對(duì)新系統(tǒng)的各種要求、確定新系統(tǒng)的邊界。

常用的調(diào)查方法有: 跟班作業(yè)、開調(diào)查會(huì)、請(qǐng)專人介紹、詢問、設(shè)計(jì)調(diào)查表請(qǐng)用戶填寫、查閱記錄。

分析和表達(dá)用戶需求的方法主要包括自頂向下和自底向上兩類方法。自頂向下的結(jié)構(gòu)化分析方法(Structured Analysis,簡(jiǎn)稱SA方法)從最上層的系統(tǒng)組織機(jī)構(gòu)入手,采用逐層分解的方式分析系統(tǒng),并把每一層用數(shù)據(jù)流圖和數(shù)據(jù)字典描述。

數(shù)據(jù)流圖表達(dá)了數(shù)據(jù)和處理過(guò)程的關(guān)系。系統(tǒng)中的數(shù)據(jù)則借助數(shù)據(jù)字典(Data Dictionary,簡(jiǎn)稱DD)來(lái)描述。

2. 概念結(jié)構(gòu)設(shè)計(jì)階段

通過(guò)對(duì)用戶需求進(jìn)行綜合、歸納與抽象,形成一個(gè)獨(dú)立于具體DBMS的概念模型,可以用E-R圖表示。

概念模型用于信息世界的建模。概念模型不依賴于某一個(gè)DBMS支持的數(shù)據(jù)模型。概念模型可以轉(zhuǎn)換為計(jì)算機(jī)上某一DBMS支持的特定數(shù)據(jù)模型。

概念模型特點(diǎn):

(1) 具有較強(qiáng)的語(yǔ)義表達(dá)能力,能夠方便、直接地表達(dá)應(yīng)用中的各種語(yǔ)義知識(shí)。

(2) 應(yīng)該簡(jiǎn)單、清晰、易于用戶理解,是用戶與數(shù)據(jù)庫(kù)設(shè)計(jì)人員之間進(jìn)行交流的語(yǔ)言。

概念模型設(shè)計(jì)的一種常用方法為IDEF1X方法,它就是把實(shí)體-聯(lián)系方法應(yīng)用到語(yǔ)義數(shù)據(jù)模型中的一種語(yǔ)義模型化技術(shù),用于建立系統(tǒng)信息模型。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

2.1 第零步——初始化工程

這個(gè)階段的任務(wù)是從目的描述和范圍描述開始,確定建模目標(biāo),開發(fā)建模計(jì)劃,組織建模隊(duì)伍,收集源材料,制定約束和規(guī)范。收集源材料是這階段的重點(diǎn)。通過(guò)調(diào)查和觀察結(jié)果,業(yè)務(wù)流程,原有系統(tǒng)的輸入輸出,各種報(bào)表,收集原始數(shù)據(jù),形成了基本數(shù)據(jù)資料表。

2.2 第一步——定義實(shí)體

實(shí)體集成員都有一個(gè)共同的特征和屬性集,可以從收集的源材料——基本數(shù)據(jù)資料表中直接或間接標(biāo)識(shí)出大部分實(shí)體。根據(jù)源材料名字表中表示物的術(shù)語(yǔ)以及具有 “代碼”結(jié)尾的術(shù)語(yǔ),如客戶代碼、代理商代碼、產(chǎn)品代碼等將其名詞部分代表的實(shí)體標(biāo)識(shí)出來(lái),從而初步找出潛在的實(shí)體,形成初步實(shí)體表。

2.3 第二步——定義聯(lián)系

IDEF1X模型中只允許二元聯(lián)系,n元聯(lián)系必須定義為n個(gè)二元聯(lián)系。根據(jù)實(shí)際的業(yè)務(wù)需求和規(guī)則,使用實(shí)體聯(lián)系矩陣來(lái)標(biāo)識(shí)實(shí)體間的二元關(guān)系,然后根據(jù)實(shí)際情況確定出連接關(guān)系的勢(shì)、關(guān)系名和說(shuō)明,確定關(guān)系類型,是標(biāo)識(shí)關(guān)系、非標(biāo)識(shí)關(guān)系(強(qiáng)制的或可選的)還是非確定關(guān)系、分類關(guān)系。如果子實(shí)體的每個(gè)實(shí)例都需要通過(guò)和父實(shí)體的關(guān)系來(lái)標(biāo)識(shí),則為標(biāo)識(shí)關(guān)系,否則為非標(biāo)識(shí)關(guān)系。非標(biāo)識(shí)關(guān)系中,如果每個(gè)子實(shí)體的實(shí)例都與而且只與一個(gè)父實(shí)體關(guān)聯(lián),則為強(qiáng)制的,否則為非強(qiáng)制的。如果父實(shí)體與子實(shí)體代表的是同一現(xiàn)實(shí)對(duì)象,那么它們?yōu)榉诸愱P(guān)系。

2.4 第三步——定義碼

通過(guò)引入交叉實(shí)體除去上一階段產(chǎn)生的非確定關(guān)系,然后從非交叉實(shí)體和獨(dú)立實(shí)體開始標(biāo)識(shí)侯選碼屬性,以便唯一識(shí)別每個(gè)實(shí)體的實(shí)例,再?gòu)暮钸x碼中確定主碼。為了確定主碼和關(guān)系的有效性,通過(guò)非空規(guī)則和非多值規(guī)則來(lái)保證,即一個(gè)實(shí)體實(shí)例的一個(gè)屬性不能是空值,也不能在同一個(gè)時(shí)刻有一個(gè)以上的值。找出誤認(rèn)的確定關(guān)系,將實(shí)體進(jìn)一步分解,最后構(gòu)造出IDEF1X模型的鍵基視圖(KB圖)。

2.5 第四步——定義屬性

從源數(shù)據(jù)表中抽取說(shuō)明性的名詞開發(fā)出屬性表,確定屬性的所有者。定義非主碼屬性,檢查屬性的非空及非多值規(guī)則。此外,還要檢查完全依賴函數(shù)規(guī)則和非傳遞依賴規(guī)則,保證一個(gè)非主碼屬性必須依賴于主碼、整個(gè)主碼、僅僅是主碼。以此得到了至少符合關(guān)系理論第三范式的改進(jìn)的IDEF1X模型的全屬性視圖。

2.6 第五步——定義其他對(duì)象和規(guī)則

定義屬性的數(shù)據(jù)類型、長(zhǎng)度、精度、非空、缺省值、約束規(guī)則等。定義觸發(fā)器、存儲(chǔ)過(guò)程、視圖、角色、同義詞、序列等對(duì)象信息。

3. 邏輯結(jié)構(gòu)設(shè)計(jì)階段

將概念結(jié)構(gòu)轉(zhuǎn)換為某個(gè)DBMS所支持的數(shù)據(jù)模型(例如關(guān)系模型),并對(duì)其進(jìn)行優(yōu)化。設(shè)計(jì)邏輯結(jié)構(gòu)應(yīng)該選擇最適于描述與表達(dá)相應(yīng)概念結(jié)構(gòu)的數(shù)據(jù)模型,然后選擇最合適的DBMS。

將E-R圖轉(zhuǎn)換為關(guān)系模型實(shí)際上就是要將實(shí)體、實(shí)體的屬性和實(shí)體之間的聯(lián)系轉(zhuǎn)化為關(guān)系模式,這種轉(zhuǎn)換一般遵循如下原則:一個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性。實(shí)體的碼就是關(guān)系的碼。

數(shù)據(jù)模型的優(yōu)化,確定數(shù)據(jù)依賴,消除冗余的聯(lián)系,確定各關(guān)系模式分別屬于第幾范式。確定是否要對(duì)它們進(jìn)行合并或分解。一般來(lái)說(shuō)將關(guān)系分解為3NF的標(biāo)準(zhǔn),即:

表內(nèi)的每一個(gè)值都只能被表達(dá)一次。

表內(nèi)的每一行都應(yīng)該被唯一的標(biāo)識(shí)(有唯一鍵)。

表內(nèi)不應(yīng)該存儲(chǔ)依賴于其他鍵的非鍵信息。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

4. 數(shù)據(jù)庫(kù)物理設(shè)計(jì)階段

為邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲(chǔ)結(jié)構(gòu)和存取方法)。根據(jù)DBMS特點(diǎn)和處理的需要,進(jìn)行物理存儲(chǔ)安排,設(shè)計(jì)索引,形成數(shù)據(jù)庫(kù)內(nèi)模式。

5. 數(shù)據(jù)庫(kù)實(shí)施階段

運(yùn)用DBMS提供的數(shù)據(jù)語(yǔ)言(例如SQL)及其宿主語(yǔ)言(例如C),根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果建立數(shù)據(jù)庫(kù),編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫(kù),并進(jìn)行試運(yùn)行。 數(shù)據(jù)庫(kù)實(shí)施主要包括以下工作:用DDL定義數(shù)據(jù)庫(kù)結(jié)構(gòu)、組織數(shù)據(jù)入庫(kù) 、編制與調(diào)試應(yīng)用程序、數(shù)據(jù)庫(kù)試運(yùn)行 ,(Data Definition Language(DDL數(shù)據(jù)定義語(yǔ)言)用作開新數(shù)據(jù)表、設(shè)定字段、刪除數(shù)據(jù)表、刪除字段,管理所有有關(guān)數(shù)據(jù)庫(kù)結(jié)構(gòu)的東西)

●Create (新增有關(guān)數(shù)據(jù)庫(kù)結(jié)構(gòu)的東西,屬DDL)

●Drop (刪除有關(guān)數(shù)據(jù)庫(kù)結(jié)構(gòu)的東西,屬DDL)

●Alter (更改結(jié)構(gòu),屬DDL)

6. 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)階段

在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行過(guò)程中必須不斷地對(duì)其進(jìn)行評(píng)價(jià)、調(diào)整與修改。內(nèi)容包括:數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)和恢復(fù)、數(shù)據(jù)庫(kù)的安全性、完整性控制、數(shù)據(jù)庫(kù)性能的監(jiān)督、分析和改進(jìn)、數(shù)據(jù)庫(kù)的重組織和重構(gòu)造。

7. 建模工具的使用

為加快數(shù)據(jù)庫(kù)設(shè)計(jì)速度,目前有很多數(shù)據(jù)庫(kù)輔助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的oracle Designer等。

ERwin主要用來(lái)建立數(shù)據(jù)庫(kù)的概念模型和物理模型。它能用圖形化的方式,描述出實(shí)體、聯(lián)系及實(shí)體的屬性。ERwin支持IDEF1X方法。通過(guò)使用 ERwin建模工具自動(dòng)生成、更改和分析IDEF1X模型,不僅能得到優(yōu)秀的業(yè)務(wù)功能和數(shù)據(jù)需求模型,而且可以實(shí)現(xiàn)從IDEF1X模型到數(shù)據(jù)庫(kù)物理設(shè)計(jì)的轉(zhuǎn)變。ERwin工具繪制的模型對(duì)應(yīng)于邏輯模型和物理模型兩種。在邏輯模型中,IDEF1X工具箱可以方便地用圖形化的方式構(gòu)建和繪制實(shí)體聯(lián)系及實(shí)體的屬性。在物理模型中,ERwin可以定義對(duì)應(yīng)的表、列,并可針對(duì)各種數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)轉(zhuǎn)換為適當(dāng)?shù)念愋汀?/p>

設(shè)計(jì)人員可根據(jù)需要選用相應(yīng)的數(shù)據(jù)庫(kù)設(shè)計(jì)建模工具。例如需求分析完成之后,設(shè)計(jì)人員可以使用Erwin畫ER圖,將ER圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型,生成數(shù)據(jù)庫(kù)結(jié)構(gòu);畫數(shù)據(jù)流圖,生成應(yīng)用程序。

二、數(shù)據(jù)庫(kù)設(shè)計(jì)技巧

1. 設(shè)計(jì)數(shù)據(jù)庫(kù)之前(需求分析階段)

1) 理解客戶需求,包括用戶未來(lái)需求變化。

2) 了解企業(yè)業(yè)務(wù)類型,可以在開發(fā)階段節(jié)約大量的時(shí)間。

3) 重視輸入(要記錄的數(shù)據(jù))、輸出(報(bào)表、查詢、視圖)。

4) 創(chuàng)建數(shù)據(jù)字典和ER 圖表

數(shù)據(jù)字典(Data Dictionary,簡(jiǎn)稱DD)是各類數(shù)據(jù)描述的集合,是關(guān)于數(shù)據(jù)庫(kù)中數(shù)據(jù)的描述,即元數(shù)據(jù),不是數(shù)據(jù)本身。(至少應(yīng)該包含每個(gè)字段的數(shù)據(jù)類型和在每個(gè)表內(nèi)的主外鍵)。

數(shù)據(jù)項(xiàng)描述: 數(shù)據(jù)項(xiàng)名,數(shù)據(jù)項(xiàng)含義說(shuō)明,別名,數(shù)據(jù)類型,長(zhǎng)度,取值范圍,取值含義,與其他數(shù)據(jù)項(xiàng)的邏輯關(guān)系

數(shù)據(jù)結(jié)構(gòu)描述: 數(shù)據(jù)結(jié)構(gòu)名,含義說(shuō)明,組成:[數(shù)據(jù)項(xiàng)或數(shù)據(jù)結(jié)構(gòu)]

數(shù)據(jù)流描述: 數(shù)據(jù)流名,說(shuō)明,數(shù)據(jù)流來(lái)源,數(shù)據(jù)流去向, 組成:[數(shù)據(jù)結(jié)構(gòu)],平均流量,高峰期流量

數(shù)據(jù)存儲(chǔ)描述: 數(shù)據(jù)存儲(chǔ)名,說(shuō)明,編號(hào),流入的數(shù)據(jù)流,流出的數(shù)據(jù)流,組成:[數(shù)據(jù)結(jié)構(gòu)],數(shù)據(jù)量,存取方式

處理過(guò)程描述: 處理過(guò)程名,說(shuō)明,輸入:[數(shù)據(jù)流],輸出:[數(shù)據(jù)流],處理:[簡(jiǎn)要說(shuō)明]

ER 圖表和數(shù)據(jù)字典可以讓任何了解數(shù)據(jù)庫(kù)的人都明確如何從數(shù)據(jù)庫(kù)中獲得數(shù)據(jù)。ER圖對(duì)表明表之間關(guān)系很有用,而數(shù)據(jù)字典則說(shuō)明了每個(gè)字段的用途以及任何可能存在的別名。對(duì)SQL 表達(dá)式的文檔化來(lái)說(shuō)這是完全必要的。

5) 定義標(biāo)準(zhǔn)的對(duì)象命名規(guī)范

數(shù)據(jù)庫(kù)各種對(duì)象的命名必須規(guī)范。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

2. 表和字段的設(shè)計(jì)(數(shù)據(jù)庫(kù)邏輯設(shè)計(jì))

表設(shè)計(jì)原則

1) 標(biāo)準(zhǔn)化和規(guī)范化

數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫(kù)中的數(shù)據(jù)冗余。標(biāo)準(zhǔn)化有好幾種形式,但Third Normal Form(3NF)通常被認(rèn)為在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了最好平衡。簡(jiǎn)單來(lái)說(shuō),遵守3NF 標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)的表設(shè)計(jì)原則是:“One Fact in One Place”即某個(gè)表只包括其本身基本的屬性,當(dāng)不是它們本身所具有的屬性時(shí)需進(jìn)行分解。表之間的關(guān)系通過(guò)外鍵相連接。它具有以下特點(diǎn):有一組表專門存放通過(guò)鍵連接起來(lái)的關(guān)聯(lián)數(shù)據(jù)。

2) 數(shù)據(jù)驅(qū)動(dòng)

采用數(shù)據(jù)驅(qū)動(dòng)而非硬編碼的方式,許多策略變更和維護(hù)都會(huì)方便得多,大大增強(qiáng)系統(tǒng)的靈活性和擴(kuò)展性。

舉例,假如用戶界面要訪問外部數(shù)據(jù)源(文件、XML 文檔、其他數(shù)據(jù)庫(kù)等),不妨把相應(yīng)的連接和路徑信息存儲(chǔ)在用戶界面支持的表里。如果用戶界面執(zhí)行工作流之類的任務(wù)(發(fā)送郵件、打印信箋、修改記錄狀態(tài)等),那么產(chǎn)生工作流的數(shù)據(jù)也可以存放在數(shù)據(jù)庫(kù)里。角色權(quán)限管理也可以通過(guò)數(shù)據(jù)驅(qū)動(dòng)來(lái)完成。事實(shí)上,如果過(guò)程是數(shù)據(jù)驅(qū)動(dòng)的,你就可以把相當(dāng)大的責(zé)任推給用戶,由用戶來(lái)維護(hù)自己的工作流過(guò)程。

3) 考慮各種變化

在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候考慮到哪些數(shù)據(jù)字段將來(lái)可能會(huì)發(fā)生變更。

4) 表名、報(bào)表名和查詢名的命名規(guī)范

(采用前綴命名)檢查表名、報(bào)表名和查詢名之間的命名規(guī)范。你可能會(huì)很快就被這些不同的數(shù)據(jù)庫(kù)要素的名稱搞糊涂了。你可以統(tǒng)一地命名這些數(shù)據(jù)庫(kù)的不同組成部分,至少你應(yīng)該在這些對(duì)象名字的開頭用 Table、Query 或者 Report 等前綴加以區(qū)別。如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符號(hào)來(lái)標(biāo)識(shí)對(duì)象(比如 tbl_Employees)。用 sp_company 標(biāo)識(shí)存儲(chǔ)過(guò)程,用 udf_ (或者類似的標(biāo)記)標(biāo)識(shí)自定義編寫的函數(shù)。

字段設(shè)計(jì)原則:

1) 每個(gè)表中都應(yīng)該添加的3 個(gè)有用的字段。

dRecordCreationDate,在SQL Server 下默認(rèn)為GETDATE()

sRecordCreator,在SQL Server 下默認(rèn)為NOT NULL DEFAULT USER

nRecordVersion,記錄的版本標(biāo)記;有助于準(zhǔn)確說(shuō)明記錄中出現(xiàn)null 數(shù)據(jù)或者丟失數(shù)據(jù)的原因

時(shí)效性數(shù)據(jù)應(yīng)包括“最近更新日期/時(shí)間”字段。時(shí)間標(biāo)記對(duì)查找數(shù)據(jù)問題的原因、按日期重新處理/重載數(shù)據(jù)和清除舊數(shù)據(jù)特別有用。

2) 對(duì)地址和電話采用多個(gè)字段

描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的靈活性。還有,電話號(hào)碼和郵件地址最好擁有自己的數(shù)據(jù)表,其間具有自身的類型和標(biāo)記類別。

3) 表內(nèi)的列[字段]的命名規(guī)則(采用前綴/后綴命名)、采用有意義的字段名

對(duì)列[字段]名應(yīng)該采用標(biāo)準(zhǔn)的前綴和后綴。如鍵是數(shù)字類型:用 _N 后綴;字符類型:_C 后綴;日期類型:_D 后綴。再如,假如你的表里有好多“money”字段,你不妨給每個(gè)列[字段]增加一個(gè) _M 后綴。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

假設(shè)有兩個(gè)表:

Customer 和 Order。Customer 表的前綴是 cu_,所以該表內(nèi)的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前綴是 or_,所以子段名是:

or_order_id、or_cust_name_id、or_quantity 和 or_description 等。

這樣從數(shù)據(jù)庫(kù)中選出全部數(shù)據(jù)的 SQL 語(yǔ)句可以寫成如下所示:

Select * From Customer, Order Where cu_surname = "MYNAME" ;

and cu_name_id = or_cust_name_id and or_quantity = 1

在沒有這些前綴的情況下則寫成這個(gè)樣子(用別名來(lái)區(qū)分):

Select * From Customer, Order Where Customer.surname = "MYNAME" ;

and Customer.name_id = Order.cust_name_id and Order.quantity = 1

第 1 個(gè) SQL 語(yǔ)句沒少鍵入多少字符。但如果查詢涉及到 5 個(gè)表乃至更多的列[字段]你就知道這個(gè)技巧多有用了。

5) 選擇數(shù)字類型和文本類型的長(zhǎng)度應(yīng)盡量充足

假設(shè)客戶ID 為10 位數(shù)長(zhǎng)。那你應(yīng)該把數(shù)據(jù)庫(kù)表字段的長(zhǎng)度設(shè)為12 或者13 個(gè)字符長(zhǎng)。但這額外占據(jù)的空間卻無(wú)需將來(lái)重構(gòu)整個(gè)數(shù)據(jù)庫(kù)就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)規(guī)模的增長(zhǎng)了。

6) 增加刪除標(biāo)記字段

在表中包含一個(gè)“刪除標(biāo)記”字段,這樣就可以把行標(biāo)記為刪除。在關(guān)系數(shù)據(jù)庫(kù)里不要單獨(dú)刪除某一行;最好采用清除數(shù)據(jù)程序而且要仔細(xì)維護(hù)索引整體性。

7) 提防大小寫混用的對(duì)象名和特殊字符

采用全部大寫而且包含下劃符的名字具有更好的可讀性(CUSTOMER_DATA),絕對(duì)不要在對(duì)象名的字符之間留空格。

8) 小心保留詞

要保證你的字段名沒有和保留詞、數(shù)據(jù)庫(kù)系統(tǒng)或者常用訪問方法沖突,比如,用 DESC 作為說(shuō)明字段名。后果可想而知!DESC 是 DESCENDING 縮寫后的保留詞。表里的一個(gè) SELECT * 語(yǔ)句倒是能用,但得到的卻是一大堆毫無(wú)用處的信息。

9) 保持字段名和類型的一致性

在命名字段并為其指定數(shù)據(jù)類型的時(shí)候一定要保證一致性。假如字段在表1中叫做“agreement_number”,就別在表2里把名字改成 “ref1”。假如數(shù)據(jù)類型在表1里是整數(shù),那在表2里可就別變成字符型了。當(dāng)然在表1(ABC)有處鍵ID,則為了可讀性,在表2做關(guān)聯(lián)時(shí)可以命名為 ABC_ID。

10) 避免使用觸發(fā)器

觸發(fā)器的功能通常可以用其他方式實(shí)現(xiàn)。在調(diào)試程序時(shí)觸發(fā)器可能成為干擾。假如你確實(shí)需要采用觸發(fā)器,你最好集中對(duì)它文檔化。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

3. 選擇鍵和索引(數(shù)據(jù)庫(kù)邏輯設(shè)計(jì))

參考:《SQL優(yōu)化-索引》一文

4. 數(shù)據(jù)完整性設(shè)計(jì)(數(shù)據(jù)庫(kù)邏輯設(shè)計(jì))

1) 完整性實(shí)現(xiàn)機(jī)制:

實(shí)體完整性:主鍵

參照完整性:

父表中刪除數(shù)據(jù):級(jí)聯(lián)刪除;受限刪除;置空值

父表中插入數(shù)據(jù):受限插入;遞歸插入

父表中更新數(shù)據(jù):級(jí)聯(lián)更新;受限更新;置空值

DBMS對(duì)參照完整性可以有兩種方法實(shí)現(xiàn):外鍵實(shí)現(xiàn)機(jī)制(約束規(guī)則)和觸發(fā)器實(shí)現(xiàn)機(jī)制用戶定義完整性:

NOT NULL;CHECK;觸發(fā)器

2) 用約束而非商務(wù)規(guī)則強(qiáng)制數(shù)據(jù)完整性

采用數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的完整性。這不但包括通過(guò)標(biāo)準(zhǔn)化實(shí)現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵) 的完整性所以不能強(qiáng)加于其他完整性規(guī)則之上。如果你在數(shù)據(jù)層確實(shí)采用了約束,你要保證有辦法把更新不能通過(guò)約束檢查的原因采用用戶理解的語(yǔ)言通知用戶界面。

3) 強(qiáng)制指示完整性

在有害數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)之前將其剔除。激活數(shù)據(jù)庫(kù)系統(tǒng)的指示完整性特性。這樣可以保持?jǐn)?shù)據(jù)的清潔而能迫使開發(fā)人員投入更多的時(shí)間處理錯(cuò)誤條件。

4) 使用查找控制數(shù)據(jù)完整性

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

5) 采用視圖

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

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

對(duì)分布式系統(tǒng)而言,在你決定是否在各個(gè)站點(diǎn)復(fù)制所有數(shù)據(jù)還是把數(shù)據(jù)保存在一個(gè)地方之前應(yīng)該估計(jì)一下未來(lái) 5 年或者 10 年的數(shù)據(jù)量。當(dāng)你把數(shù)據(jù)傳送到其他站點(diǎn)的時(shí)候,最好在數(shù)據(jù)庫(kù)字段中設(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)都完全一致。

7) 關(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)系要難得多。

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

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

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

提供一整套常規(guī)的存儲(chǔ)過(guò)程來(lái)訪問各組以便加快速度和簡(jiǎn)化客戶程序代碼的開發(fā)。數(shù)據(jù)庫(kù)不只是一個(gè)存放數(shù)據(jù)的地方,它也是簡(jiǎn)化編碼之地。

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

5. 其他設(shè)計(jì)技巧

1) 避免使用觸發(fā)器

觸發(fā)器的功能通??梢杂闷渌绞綄?shí)現(xiàn)。在調(diào)試程序時(shí)觸發(fā)器可能成為干擾。假如你確實(shí)需要采用觸發(fā)器,你最好集中對(duì)它文檔化。

2) 使用常用英語(yǔ)(或者其他任何語(yǔ)言)而不要使用編碼

在創(chuàng)建下拉菜單、列表、報(bào)表時(shí)最好按照英語(yǔ)名排序。假如需要編碼,可以在編碼旁附上用戶知道的英語(yǔ)。

3) 保存常用信息

讓一個(gè)表專門存放一般數(shù)據(jù)庫(kù)信息非常有用。在這個(gè)表里存放數(shù)據(jù)庫(kù)當(dāng)前版本、最近檢查/修復(fù)(對(duì)Access)、關(guān)聯(lián)設(shè)計(jì)文檔的名稱、客戶等信息。這樣可以實(shí)現(xiàn)一種簡(jiǎn)單機(jī)制跟蹤數(shù)據(jù)庫(kù),當(dāng)客戶抱怨他們的數(shù)據(jù)庫(kù)沒有達(dá)到希望的要求而與你聯(lián)系時(shí),這樣做對(duì)非客戶機(jī)/服務(wù)器環(huán)境特別有用。

4) 包含版本機(jī)制

在數(shù)據(jù)庫(kù)中引入版本控制機(jī)制來(lái)確定使用中的數(shù)據(jù)庫(kù)的版本。時(shí)間一長(zhǎng),用戶的需求總是會(huì)改變的。最終可能會(huì)要求修改數(shù)據(jù)庫(kù)結(jié)構(gòu)。把版本信息直接存放到數(shù)據(jù)庫(kù)中更為方便。

5) 編制文檔

對(duì)所有的快捷方式、命名規(guī)范、限制和函數(shù)都要編制文檔。

采用給表、列、觸發(fā)器等加注釋的 數(shù)據(jù)庫(kù)工具。對(duì)開發(fā)、支持和跟蹤修改非常有用。

對(duì)數(shù)據(jù)庫(kù)文檔化,或者在數(shù)據(jù)庫(kù)自身的內(nèi)部或者單獨(dú)建立文檔。這樣,當(dāng)過(guò)了一年多時(shí)間后再回過(guò)頭來(lái)做第2 個(gè)版本,犯錯(cuò)的機(jī)會(huì)將大大減少。

6) 測(cè)試、測(cè)試、反復(fù)測(cè)試

建立或者修訂數(shù)據(jù)庫(kù)之后,必須用用戶新輸入的數(shù)據(jù)測(cè)試數(shù)據(jù)字段。最重要的是,讓用戶進(jìn)行測(cè)試并且同用戶一道保證選擇的數(shù)據(jù)類型滿足商業(yè)要求。測(cè)試需要在把新數(shù)據(jù)庫(kù)投入實(shí)際服務(wù)之前完成。

7) 檢查設(shè)計(jì)

在開發(fā)期間檢查數(shù)據(jù)庫(kù)設(shè)計(jì)的常用技術(shù)是通過(guò)其所支持的應(yīng)用程序原型檢查數(shù)據(jù)庫(kù)。換句話說(shuō),針對(duì)每一種最終表達(dá)數(shù)據(jù)的原型應(yīng)用,保證你檢查了數(shù)據(jù)模型并且查看如何取出數(shù)據(jù)。

三、數(shù)據(jù)庫(kù)命名規(guī)范

1. 實(shí)體(表)的命名

1) 表以名詞或名詞短語(yǔ)命名,確定表名是采用復(fù)數(shù)還是單數(shù)形式,此外給表的別名定義簡(jiǎn)單規(guī)則(比方說(shuō),如果表名是一個(gè)單詞,別名就取單詞的前4 個(gè)字母;如果表名是兩個(gè)單詞,就各取兩個(gè)單詞的前兩個(gè)字母組成4 個(gè)字母長(zhǎng)的別名;如果表的名字由3 個(gè)單詞組成,從頭兩個(gè)單詞中各取一個(gè)然后從最后一個(gè)單詞中再取出兩個(gè)字母,結(jié)果還是組成4 字母長(zhǎng)的別名,其余依次類推)

對(duì)工作用表來(lái)說(shuō),表名可以加上前綴WORK_ 后面附上采用該表的應(yīng)用程序的名字。在命名過(guò)程當(dāng)中,根據(jù)語(yǔ)義拼湊縮寫即可。注意:將字段名稱會(huì)統(tǒng)一成大寫或者小寫中的一種,故中間加上下劃線。

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

舉例:

定義的縮寫 Sales: Sal 銷售;

Order: Ord 訂單;

Detail: Dtl 明細(xì);

則銷售訂單明細(xì)表命名為:Sal_Ord_Dtl;

2) 如果表或者是字段的名稱僅有一個(gè)單詞,那么建議不使用縮寫,而是用完整的單詞。

舉例:

定義的縮寫 Material Ma 物品;

物品表名為:Material, 而不是 Ma.

但是字段物品編碼則是:Ma_ID;而不是Material_ID

3) 所有的存儲(chǔ)值列表的表前面加上前綴Z

目的是將這些值列表類排序在數(shù)據(jù)庫(kù)最后。

4) 所有的冗余類的命名(主要是累計(jì)表)前面加上前綴X

冗余類是為了提高數(shù)據(jù)庫(kù)效率,非規(guī)范化數(shù)據(jù)庫(kù)的時(shí)候加入的字段或者表

5) 關(guān)聯(lián)類通過(guò)用下劃線連接兩個(gè)基本類之后,再加前綴R的方式命名,后面按照字母順序羅列兩個(gè)表名或者表名的縮寫。

關(guān)聯(lián)表用于保存多對(duì)多關(guān)系。

如果被關(guān)聯(lián)的表名大于10個(gè)字母,必須將原來(lái)的表名的進(jìn)行縮寫。如果沒有其他原因,建議都使用縮寫。

舉例:表Object與自身存在多對(duì)多的關(guān)系,則保存多對(duì)多關(guān)系的表命名為:R_Object;

作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴, 2007-09-27 15:17

本文詳細(xì)解析了數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫(kù)命名規(guī)范……

2. 屬性(列)的命名

1) 采用有意義的列名

表內(nèi)的列要針對(duì)鍵采用一整套設(shè)計(jì)規(guī)則。每一個(gè)表都將有一個(gè)自動(dòng)ID作為主健,邏輯上的主健作為第一組候選主健來(lái)定義;

A、如果是數(shù)據(jù)庫(kù)自動(dòng)生成的編碼,統(tǒng)一命名為:ID

B、如果是自定義的邏輯上的編碼則用縮寫加“ID”的方法命名,即“XXXX_ID”

C、如果鍵是數(shù)字類型,你可以用_NO 作為后綴;

D、如果是字符類型則可以采用_CODE 后綴

E、對(duì)列名應(yīng)該采用標(biāo)準(zhǔn)的前綴和后綴。

舉例:銷售訂單的編號(hào)字段命名:Sal_Ord_ID;如果還存在一個(gè)數(shù)據(jù)庫(kù)生成的自動(dòng)編號(hào),則命名為:ID。

2) 所有的屬性加上有關(guān)類型的后綴

注意,如果還需要其它的后綴,都放在類型后綴之前。

注: 數(shù)據(jù)類型是文本的字段,類型后綴TX可以不寫。有些類型比較明顯的字段,可以不寫類型后綴。

3) 采用前綴命名

給每個(gè)表的列名都采用統(tǒng)一的前綴,那么在編寫SQL表達(dá)式的時(shí)候會(huì)得到大大的簡(jiǎn)化。這樣做也確實(shí)有缺點(diǎn),比如破壞了自動(dòng)表連接工具的作用,后者把公共列名同某些數(shù)據(jù)庫(kù)聯(lián)系起來(lái)。

3. 視圖的命名

1) 視圖以V作為前綴,其他命名規(guī)則和表的命名類似;

2) 命名應(yīng)盡量體現(xiàn)各視圖的功能。

4. 觸發(fā)器的命名(盡量不使用)

觸發(fā)器以TR作為前綴,觸發(fā)器名為相應(yīng)的表名加上后綴,Insert觸發(fā)器加'_I',Delete觸發(fā)器加'_D',Update觸發(fā)器加'_U',如:TR_Customer_I,TR_Customer_D,TR_Customer_U。

5. 存儲(chǔ)過(guò)程名

存儲(chǔ)過(guò)程應(yīng)以'UP_'開頭,和系統(tǒng)的存儲(chǔ)過(guò)程區(qū)分,后續(xù)部分主要以動(dòng)賓形式構(gòu)成,并用下劃線分割各個(gè)組成部分。如增加代理商的帳戶的存儲(chǔ)過(guò)程為'UP_Ins_Agent_Account'。

6. 變量名

變量名采用小寫,若屬于詞組形式,用下劃線分隔每個(gè)單詞,如@my_err_no。

7. 命名中其他注意事項(xiàng)

1) 以上命名都不得超過(guò)30個(gè)字符的系統(tǒng)限制。變量名的長(zhǎng)度限制為29(不包括標(biāo)識(shí)字符@)。

2) 數(shù)據(jù)對(duì)象、變量的命名都采用英文字符,禁止使用中文命名。絕對(duì)不要在對(duì)象名的字符之間留空格。

3) 小心保留詞,要保證你的字段名沒有和保留詞、數(shù)據(jù)庫(kù)系統(tǒng)或者常用訪問方法沖突

4) 保持字段名和類型的一致性,在命名字段并為其指定數(shù)據(jù)類型的時(shí)候一定要保證一致性。假如數(shù)據(jù)類型在一個(gè)表里是整數(shù),那在另一個(gè)表里可就別變成字符型了。

從事java實(shí)施應(yīng)該具備哪些技能?

1、語(yǔ)法:必須比較熟悉,在寫代碼的時(shí)候,IDE(Integrated Development Environment,集成開發(fā)環(huán)境)的編輯器對(duì)某一行報(bào)錯(cuò)應(yīng)該能夠根據(jù)報(bào)錯(cuò)信息知道是什么樣的語(yǔ)法錯(cuò)誤,并且知道任何修正。

2、命令:必須熟悉JDK(Java Development Kit,Java開發(fā)工具箱——JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境,Java工具和Java基礎(chǔ)的類庫(kù)。JDK是學(xué)好Java的第一步。)帶的一些常用命令及其常用選項(xiàng),命令至少需要熟悉:appletviewer、HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過(guò),那么你對(duì)java實(shí)際上還很不了解。

3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進(jìn)行工程管理、常用選項(xiàng)的設(shè)置、插件的安裝配置以及進(jìn)行調(diào)試。

4、API(Application Programming Interface,應(yīng)用程序編程接口):Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認(rèn)為是必須熟悉的,否則不可能熟練的運(yùn)用Java,包括:

◆java.lang包下的80%以上的類的功能的靈活運(yùn)用;

◆java.util包下的80%以上的類的靈活運(yùn)用,特別是集合類體系、規(guī)則表達(dá)式、zip、以及時(shí)間、隨機(jī)數(shù)、屬性、資源和Timer;

◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計(jì)思路以及常用IO類的特性和使用場(chǎng)合;

◆java.math包下的100%的內(nèi)容;

◆java.net包下的60%以上的內(nèi)容,對(duì)各個(gè)類的功能比較熟悉;

◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類;

◆熟練運(yùn)用JDBC. 80%、java.security包下40%以上的內(nèi)容,如果對(duì)于安全沒有接觸的話根本就不可能掌握java;

◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打?。?/p>

◆Swing的基本內(nèi)容,和AWT的要求類似;

◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點(diǎn)并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。

5、測(cè)試:Junit測(cè)試是程序員測(cè)試,即所謂白盒測(cè)試。一位合格的Java開發(fā)工程師必須熟悉使用junit編寫測(cè)試用例完成代碼的自動(dòng)測(cè)試。

6、管理:必須熟悉使用Ant(中文譯為螞蟻,是一種基于Java的build工具。)完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動(dòng)測(cè)試。

7、排錯(cuò):應(yīng)該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。

8、思想:必須掌握OOP(Object Oriented Programming,面向?qū)ο缶幊蹋┑闹饕?,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。

9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個(gè)單詞一般是動(dòng)詞,包名全部小寫等,這樣程序的可讀性才比較好。

10、博學(xué):掌握J(rèn)2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技術(shù),掌握軟件架構(gòu)設(shè)計(jì)思想、搜索引擎優(yōu)化、緩存系統(tǒng)設(shè)計(jì)、網(wǎng)站負(fù)載均衡、系統(tǒng)性能調(diào)優(yōu)等實(shí)用技術(shù)。


文章題目:java編輯代碼在線測(cè)試 java 代碼測(cè)試
當(dāng)前URL:http://weahome.cn/article/dosipge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部