資料庫第一級
1. 資料庫中第一二三四範式應該怎樣去理解
第一範式(1NF):在關系模式R中的每一個具體關系r中,如果每個屬性值 都是不可再分的最小數據單位,則稱R是第一範式的關系。例:如職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家裡電話號碼) 規范成為1NF有三種方法:
一是重復存儲職工號和姓名。這樣,關鍵字只能是電話號碼。
二是職工號為關鍵字,電話號碼分為單位電話和住宅電話兩個屬性
三是職工號為關鍵字,但強制每條記錄只能有一個電話號碼。
以上三個方法,第一種方法最不可取,按實際情況選取後兩種情況。
第二範式(2NF):如果關系模式R(U,F)中的所有非主屬性都完全依賴於任意一個候選關鍵字,則稱關系R 是屬於第二範式的。
例:選課關系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。 由以上條件,關鍵字為組合關鍵字(SNO,CNO)
在應用中使用以上關系模式有以下問題:
a.數據冗餘,假設同一門課由40個學生選修,學分就 重復40次。
b.更新異常,若調整了某課程的學分,相應的元組CREDIT值都要更新,有可能會出現同一門課學分不同。
c.插入異常,如計劃開新課,由於沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入。
d.刪除異常,若學生已經結業,從當前資料庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學分記錄無法保存。
原因:非關鍵字屬性CREDIT僅函數依賴於CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。
解決方法:分成兩個關系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關系包括兩個關系模式,它們之間通過SC1中的外關鍵字CNO相聯系,需要時再進行自然聯接,恢復了原來的關系
第三範式(3NF):如果關系模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞信賴,則稱關系R是屬於第三範式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各屬性分別代表學號,
姓名,所在系,系名稱,系地址。
關鍵字SNO決定各個屬性。由於是單個關鍵字,沒有部分依賴的問題,肯定是2NF。但這關系肯定有大量的冗餘,有關學生所在的幾個屬性DNO,DNAME,LOCATION將重復存儲,插入,刪除和修改時也將產生類似以上例的情況。
原因:關系中存在傳遞依賴造成的。即SNO -> DNO。 而DNO -> SNO卻不存在,DNO -> LOCATION, 因此關鍵遼 SNO 對 LOCATION 函數決定是通過傳遞依賴 SNO -> LOCATION 實現的。也就是說,SNO不直接決定非主屬性LOCATION。
解決目地:每個關系模式中不能留有傳遞依賴。
解決方法:分為兩個關系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:關系S中不能沒有外關鍵字DNO。否則兩個關系之間失去聯系。
BCNF:如果關系模式R(U,F)的所有屬性(包括主屬性和非主屬性)都不傳遞依賴於R的任何候選關鍵字,那麼稱關系R是屬於BCNF的。或是關系模式R,如果每個決定因素都包含關鍵字(而不是被關鍵字所包含),則RCNF的關系模式。
例:配件管理關系模式 WPE(WNO,PNO,ENO,QNT)分別表倉庫號,配件號,職工號,數量。有以下條件
a.一個倉庫有多個職工。
b.一個職工僅在一個倉庫工作。
c.每個倉庫里一種型號的配件由專人負責,但一個人可以管理幾種配件。
d.同一種型號的配件可以分放在幾個倉庫中。
分析:由以上得 PNO 不能確定QNT,由組合屬性(WNO,PNO)來決定,存在函數依賴(WNO,PNO) -> ENO。由於每個倉庫里的一種配件由專人負責,而一個人可以管理幾種配件,所以有組合屬性(WNO,PNO)才能確定負責人,有(WNO,PNO)-> ENO。因為 一個職工僅在一個倉庫工作,有ENO -> WNO。由於每個倉庫里的一種配件由專人負責,而一個職工僅在一個倉庫工作,有 (ENO,PNO)-> QNT。
找一下候選關鍵字,因為(WNO,PNO) -> QNT,(WNO,PNO)-> ENO ,因此 (WNO,PNO)可以決定整個元組,是一個候選關鍵字。根據ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能決定整個元組,為另一個候選關鍵字。屬性ENO,WNO,PNO 均為主屬性,只有一個非主屬性QNT。它對任何一個候選關鍵字都是完全函數依賴的,並且是直接依賴,所以該關系模式是3NF。
分析一下主屬性。因為ENO->WNO,主屬性ENO是WNO的決定因素,但是它本身不是關鍵字,只是組合關鍵字的一部分。這就造成主屬性WNO對另外一個候選關鍵字(ENO,PNO)的部 分依賴,因為(ENO,PNO)-> ENO但反過來不成立,而P->WNO,故(ENO,PNO)-> WNO 也是傳遞依賴。
雖然沒有非主屬性對候選關鍵遼的傳遞依賴,但存在主屬性對候選關鍵字的傳遞依賴,同樣也會帶來麻煩。如一個新職工分配到倉庫工作,但暫時處於實習階段,沒有獨立負責對某些配件的管理任務。由於缺少關鍵字的一部分PNO而無法插入到該關系中去。又如某個人改成不管配件了去負責安全,則在刪除配件的同時該職工也會被刪除。
解決辦法:分成管理EP(ENO,PNO,QNT),關鍵字是(ENO,PNO)工作EW(ENO,WNO)其關鍵字是ENO
缺點:分解後函數依賴的保持性較差。如此例中,由於分解,函數依賴(WNO,PNO)-> ENO 丟失了, 因而對原來的語義有所破壞。沒有體現出每個倉庫里一種部件由專人負責。有可能出現 一部件由兩個人或兩個以上的人來同時管理。因此,分解之後的關系模式降低了部分完整性約束。
一個關系分解成多個關系,要使得分解有意義,起碼的要求是分解後不丟失原來的信息。這些信息不僅包括數據本身,而且包括由函數依賴所表示的數據之間的相互制約。進行分解的目標是達到更高一級的規范化程度,但是分解的同時必須考慮兩個問題:無損聯接性和保持函數依賴。有時往往不可能做到既有無損聯接性,又完全保持函數依賴。需要根據需要進行權衡。
1NF直到BCNF的四種範式之間有如下關系:
BCNF包含了3NF包含2NF包含1NF
很少有人做到很符合以上幾個範式的,一般說來,第一範式大家都可以遵守,完全遵守第二第三範式的人很少了,遵守的人一定就是設計資料庫的高手了,BCNF的範式出現機會較少,而且會破壞完整性,你可以在做設計之時不考慮它,當然在ORACLE中可通過觸發器解決其缺點。
2. 資料庫的發展簡史
資料庫技術是本世紀60年代開始興起的一門信息管理自動化的新興學科,是計算機科學中的一個重要分支。隨著計算機應用的不斷發展,在計算機應用領域中,數據處理越來越佔主導
地位,資料庫技術的應用也越來越廣泛。
資料庫是數據管理的產物。數據管理是資料庫的核心任務,內容包括對數據的分類、組織、編碼、儲存、檢索和維護。隨著計算機硬體和軟體的發展,資料庫技術也不斷地發展。從數據管理的角度看,資料庫技術到目前共經歷了人工管理階段、文件系統階段和資料庫系統階段。
A.人工管理階段
人工管理階段是指計算機誕生的初期(即20世紀50年代後期之前),這個時期的計算機主要用於科學計算。從硬體看,沒有磁碟等直接存取的存儲設備;從軟體看,沒有操作系統和管理數據的軟體,數據處理方式是批處理。
這個時期數據管理的特點是:
1. 數據不保存
該時期的計算機主要應用於科學計算,一般不需要將數據長期保存,只是在計算某一課題 時將數據輸入,用完後不保存原始數據,也不保存計算結果。
2. 沒有對數據進行管理的軟體系統
程序員不僅要規定數據的邏輯結構,而且還要在程序中設計物理結構,包括存儲結構、存取方法、輸入輸出方式等。因此程序中存取數據的子程序隨著存儲的改變而改變,數據與程序不具有一致性。
3. 沒有文件的概念
數據的組織方式必須由程序員自行設計。
4. 一組數據對應於一個程序,數據是面向應用的
即使兩個程序用到相同的數據,也必須各自定義、各自組織,數據無法共享、無法相互利用和互相參照,從而導致程序和程序之間有大量重復的數據。
B.文件系統階段
文件系統階段是指計算機不僅用於科學計算,而且還大量用於管理數據的階段(從50年代後期到60年代中期)。在硬體方面,外存儲器有了磁碟、磁鼓等直接存取的存儲設備。在軟體方面,操作系統中已經有了專門用於管理數據的軟體,稱為文件系統。
這個時期數據管理的特點是:
1. 數據需要長期保存在外存上供反復使用
由於計算機大量用於數據處理,經常對文件進行查詢、修改、插入和刪除等操作,所以數據需要長期保留,以便於反復操作。
2. 程序之間有了一定的獨立性
操作系統提供了文件管理功能和訪問文件的存取方法,程序和數據之間有了數據存取的介面,程序可以通過文件名和數據打交道,不必再尋找數據的物理存放位置,至此,數據有了物理結構和邏輯結構的區別,但此時程序和數據之間的獨立性尚還不充分。
3. 文件的形式已經多樣化
由於已經有了直接存取的存儲設備,文件也就不再局限於順序文件,還有了索引文件、鏈表文件等,因而,對文件的訪問可以是順序訪問,也可以是直接訪問。
4. 數據的存取基本上以記錄為單位
3. 資料庫<>是什麼意思
資料庫中<>的含義:
<>為不等號,常見的其它寫法有: !=
資料庫功能:
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。
資料庫定義1:
資料庫(Database)是按照數據結構來組織、存儲和管理數據的建立在計算機存儲設備上的倉庫。
簡單來說是本身可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
在經濟管理的日常工作中,常常需要把某些相關的數據放進這樣的「倉庫」,並根據管理的需要進行相應的處理。
例如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個資料庫。有了這個"數據倉庫"我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種"資料庫",使其可以利用計算機實現財務、倉庫、生產的自動化管理。
資料庫定義2:
嚴格來說,資料庫是長期儲存在計算機內、有組織的、可共享的數據集合。資料庫中的數據指的是以一定的數據模型組織、描述和儲存在一起、具有盡可能小的冗餘度、較高的數據獨立性和易擴展性的特點並可在一定范圍內為多個用戶共享。
這種數據集合具有如下特點:盡可能不重復,以最優方式為某個特定組織的多種應用服務,其數據結構獨立於使用它的應用程序,對數據的增、刪、改、查由統一軟體進行管理和控制。從發展的歷史看,資料庫是數據管理的高級階段,它是由文件管理系統發展起來的。
資料庫處理系統:
資料庫是一個單位或是一個應用領域的通用數據處理系統,它存儲的是屬於企業和事業部門、團體和個人的有關數據的集合。資料庫中的數據是從全局觀點出發建立的,按一定的數據模型進行組織、描述和存儲。其結構基於數據間的自然聯系,從而可提供一切必要的存取路徑,且數據不再針對某一應用,而是面向全組織,具有整體的結構化特徵。
資料庫中的數據是為眾多用戶所共享其信息而建立的,已經擺脫了具體程序的限制和制約。不同的用戶可以按各自的用法使用資料庫中的數據;多個用戶可以同時共享資料庫中的數據資源,即不同的用戶可以同時存取資料庫中的同一個數據。數據共享性不僅滿足了各用戶對信息內容的要求,同時也滿足了各用戶之間信息通信的要求。
資料庫基本結構:
資料庫的基本結構分三個層次,反映了觀察資料庫的三種不同角度。
以內模式為框架所組成的資料庫叫做物理資料庫;以概念模式為框架所組成的數據叫概念資料庫;以外模式為框架所組成的資料庫叫用戶資料庫。
⑴ 物理數據層。
它是資料庫的最內層,是物理存貯設備上實際存儲的數據的集合。這些數據是原始數據,是用戶加工的對象,由內部模式描述的指令操作處理的位串、字元和字組成。
⑵ 概念數據層。
它是資料庫的中間一層,是資料庫的整體邏輯表示。指出了每個數據的邏輯定義及數據間的邏輯聯系,是存貯記錄的集合。它所涉及的是資料庫所有對象的邏輯關系,而不是它們的物理情況,是資料庫管理員概念下的資料庫。
⑶ 用戶數據層。
它是用戶所看到和使用的資料庫,表示了一個或一些特定用戶使用的數據集合,即邏輯記錄的集合。
資料庫不同層次之間的聯系是通過映射進行轉換的。
資料庫主要特點:
⑴ 實現數據共享
數據共享包含所有用戶可同時存取資料庫中的數據,也包括用戶可以用各種方式通過介面使用資料庫,並提供數據共享。
⑵ 減少數據的冗餘度
同文件系統相比,由於資料庫實現了數據共享,從而避免了用戶各自建立應用文件。減少了大量重復數據,減少了數據冗餘,維護了數據的一致性。
⑶ 數據的獨立性
數據的獨立性包括邏輯獨立性(資料庫中資料庫的邏輯結構和應用程序相互獨立)和物理獨立性(數據物理結構的變化不影響數據的邏輯結構)。
⑷ 數據實現集中控制
文件管理方式中,數據處於一種分散的狀態,不同的用戶或同一用戶在不同處理中其文件之間毫無關系。利用資料庫可對數據進行集中控制和管理,並通過數據模型表示各種數據的組織以及數據間的聯系。
⑸數據一致性和可維護性,以確保數據的安全性和可靠性
主要包括:①安全性控制:以防止數據丟失、錯誤更新和越權使用;②完整性控制:保證數據的正確性、有效性和相容性;③並發控制:使在同一時間周期內,允許對數據實現多路存取,又能防止用戶之間的不正常交互作用。
⑹ 故障恢復
由資料庫管理系統提供一套方法,可及時發現故障和修復故障,從而防止數據被破壞。資料庫系統能盡快恢復資料庫系統運行時出現的故障,可能是物理上或是邏輯上的錯誤。比如對系統的誤操作造成的數據錯誤等。
資料庫數據種類:
資料庫通常分為層次式資料庫、網路式資料庫和關系式資料庫三種。而不同的資料庫是按不同的數據結構來聯系和組織的。
1.數據結構模型
⑴數據結構
所謂數據結構是指數據的組織形式或數據之間的聯系。
如果用D表示數據,用R表示數據對象之間存在的關系集合,則將DS=(D,R)稱為數據結構。
例如,設有一個電話號碼簿,它記錄了n個人的名字和相應的電話號碼。為了方便地查找某人的電話號碼,將人名和號碼按字典順序排列,並在名字的後面跟隨著對應的電話號碼。這樣,若要查找某人的電話號碼(假定他的名字的第一個字母是Y),那麼只須查找以Y開頭的那些名字就可以了。該例中,數據的集合D就是人名和電話號碼,它們之間的聯系R就是按字典順序的排列,其相應的數據結構就是DS=(D,R),即一個數組。
⑵數據結構類型
數據結構又分為數據的邏輯結構和數據的物理結構。
數據的邏輯結構是從邏輯的角度(即數據間的聯系和組織方式)來觀察數據,分析數據,與數據的存儲位置無關;數據的物理結構是指數據在計算機中存放的結構,即數據的邏輯結構在計算機中的實現形式,所以物理結構也被稱為存儲結構。這里只研究數據的邏輯結構,並將反映和實現數據聯系的方法稱為數據模型。
比較流行的數據模型有三種,即按圖論理論建立的層次結構模型和網狀結構模型以及按關系理論建立的關系結構模型。
2.層次、網狀和關系資料庫系統
⑴層次結構模型
層次結構模型實質上是一種有根結點的定向有序樹(在數學中"樹"被定義為一個無回的連通圖)。下圖是一個高等學校的組織結構圖。這個組織結構圖像一棵樹,校部就是樹根(稱為根結點),各系、專業、教師、學生等為枝點(稱為結點),樹根與枝點之間的聯系稱為邊,樹根與邊之比為1:N,即樹根只有一個,樹枝有N個。按照層次模型建立的資料庫系統稱為層次模型資料庫系統。IMS(Information Management System)是其典型代表。
⑵網狀結構模型
按照網狀數據結構建立的資料庫系統稱為網狀資料庫系統,其典型代表是DBTG(Database Task Group)。用數學方法可將網狀數據結構轉化為層次數據結構。
⑶ 關系結構模型
關系式數據結構把一些復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。例如某單位的職工關系就是一個二元關系。
由關系數據結構組成的資料庫系統被稱為關系資料庫系統。
在關系資料庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過對這些關系表格的分類、合並、連接或選取等運算來實現數據的管理。
dBASEⅡ就是這類資料庫管理系統的典型代表。對於一個實際的應用問題(如人事管理問題),有時需要多個關系才能實現。用dBASEⅡ建立起來的一個關系稱為一個資料庫(或稱資料庫文件),而把對應多個關系建立起來的多個資料庫稱為資料庫系統。dBASEⅡ的另一個重要功能是通過建立命令文件來實現對資料庫的使用和管理,對於一個資料庫系統相應的命令序列文件,稱為該資料庫的應用系統。
因此,可以概括地說,一個關系稱為一個資料庫,若干個資料庫可以構成一個資料庫系統。資料庫系統可以派生出各種不同類型的輔助文件和建立它的應用系統。
資料庫類型:
網狀資料庫(Network Database)、關系資料庫(Relational Database)、樹狀資料庫(Hierarchical Database)、面向對象資料庫(Object-oriented Database)等。商業應用中主要是關系資料庫,比如Oracle、DB2、Sybase、MS sql Server、Informax、MySQL等。
4. 計算機一級資料庫試題
全國計算機等級考試(簡稱 NCRE)是測試應試者計算機應用知識與能力的水平考試。考試合格者由教育部考試中心頒發合格證書,該證書是計算機應用知識與能力的證明。已被社會各行業、各部門廣泛認可。2007年下半年開考一級、二級、三級、四級。1995年開考以來,我省取得全國計算機等級考試證書的人員已達到21萬人。現將本次考試的有關事項公布如下: 一、報名時間及有關規定 1、報名時間: 2007年 6 月 1日- 7月15 日 。 2、報名地點:各計算機等級考試考點(見附件)。 3、報考人員不論年齡、職業、學歷、在職與否,均可根據自身學習和使用計算機的實際情況,選考任一個等級的考試,且一次只能報考一個等級的考試。考生須憑身份證報名。沒有身份證的未成年人或正在換發身份證的成年人,可憑當地派出所開出帶考生本人近照的身份證明報名;現役軍人(或武警)憑軍人(或武警)身份證件報名。 4、考生報名時,須到考點或報名點現場進行信息採集,交納報名考試費。考生在填塗報名卡時,須認真核對,核實無誤後在《考生報名登記表》上簽字,報名結束後一律不準修改報名信息。 5、本考試包括筆試和機試兩項,兩項均合格方能發給合格證書。上一次考試已取得筆試或機試單項合格成績的考生,本次報名時,須填塗原准考證號碼,繳納補考項的報名考試費。 二、考試時間及有關事項 1、考試時間: 2007年 9月22日- 9月27日 2、全國計算機等級考試採用由全國統一命題,統一考試時間,紙筆考試和上機操作考試相結合的形式。紙筆考試題型包括選擇題和填空題,四級含有論述題。一級各科全部採用上機考試,不進行筆試考試。筆試考試時間:二級C為120分鍾,二級其他科目均為90分鍾,三級為120分鍾,四級為180分鍾。上機操作考試時間:一級為90分鍾,二級C、三級、四級均為60分鍾,二級除C外各科均為90分鍾。 3、報考級別和考試科目: 一級:考核微型計算機基礎知識和使用辦公軟體及網際網路(Internet)的基本技能。一級MS Office和一級WPS Office。考生可從兩個科目中任選一種。 二級:考核計算機基礎知識和使用一種高級計算機語言編寫程序以及上機調試的基本技能。考生可從以下考試科目中任選一種。 考試科目:語言程序設計(包括C、C++、java、Visual Basic)、資料庫程序設計(包括Visual FoxPro、Access)。 三級:分為「PC技術」、「信息管理技術」、「資料庫技術」和「網路技術」四個類別。「PC技術」考核PC機硬體組成和Windows操作系統的基礎知識以及PC機使用、管理、維護和應用開發的基本技能;「信息管理技術」考核計算機信息管理應用基礎知識及管理信息系統項目和辦公自動化系統項目開發、維護的基本技能;「資料庫技術」考核資料庫系統基礎知識及資料庫應用系統項目開發和維護的基本功能;「網路技術」考核計算機網路基礎知識及計算機網路應用系統開發和管理的基本技能。 四級:考核計算機專業基本知識以及計算機應用項目的分析設計、組織實施的基本技能。 4、考生在考試前一周到報名點領取准考證,憑准考證和身份證參加考試,缺一不準進場考試。考生在開考15分鍾後不得入場,考試結束前不得離開考場。
求採納為滿意回答。
5. 在資料庫中怎麼做關於等級的表
level_id,level_name,level_min,level_max(,start_time,end_time,active_flag)
等級ID,等級名字,等級最小值,等級最大值(,等級生效時間,等級失效時間,等級生效標識)
後面括弧內的是可選部分,如果只是學校的作業可以不用的
6. 什麼是資料庫
什麼是資料庫?
資料庫是以某種文件結構存儲的一系列信息表,這種文件結構使您能夠訪問這些表、選擇表中的列、對表進行排序以及根據各種標准選擇行。資料庫通常有多個 索引與這些表中的許多列相關聯,所以我們能盡可能快地訪問這些表。
以員工記錄為例,您可以設想一個含有員工姓名、地址、工資、扣稅以及津貼等內容的表。讓我們考慮一下這些內容可能如何組織在一起。您可以設想一個表包含員工姓名、地址和電話號碼。您希望保存的其它信息可能包括工資、工資范圍、上次加薪時間、下次加薪時間、員工業績評定等內容。
這些內容是否應保存在一個表格中?幾乎可以肯定不應該如此。不同類別的員工的工資范圍可能沒有區別;這樣,您可以僅將員工類型儲存在員工記錄表中,而將工資范圍儲存在另一個表中,通過類型編號與這個表關聯。考慮以下情況:
Key Lastname SalaryType SalaryType Min Max
1 Adams 2 1 30000 45000
2 Johnson 1 2 45000 60000
3 Smyth 3 3 60000 75000
4 Tully 1
5 Wolff 2
SalaryType 列中的數據引用第二個表。我們可以想像出許多種這樣的表,如用於存儲居住城市和每個城市的稅值、健康計劃扣除金額等的表。每個表都有一個主鍵列(如上面兩個表中最左邊的列)和若干數據列。在資料庫中建立表格既是一門藝術,也是一門科學。這些表的結構由它們的範式指出。我們通常說表屬於1NF、2NF 或 3NF。
第一範式:表中的每個表元應該只有一個值(永遠不可能是一個數組)。(1NF)
第二範式:滿足 1NF,並且每一個非主鍵列完全依賴於主鍵列。這表示主鍵和該行中的剩餘表元之間是 1 對 1 的關系。(2NF)
第三範式:滿足 2NF,並且所有非主鍵列是互相獨立的。任何一個數據列中包含的值都不能從其他列的數據計算得到。(3NF)
現在,幾乎所有的資料庫都是基於「第三範式 (3NF)」創建的。這意味著通常都有相當多的表,每個表中的信息列都相對較少。
從資料庫中獲取數據
假設我們希望生成一個包含員工及其工資范圍的表,在我們設計的一個練習中將使用這個表。這個表格不是直接存在在資料庫中,但可以通過向資料庫發出一個查詢來構建它。我們希望得到如下所示的一個表:
Name Min Max
Tully $30,000.00 $45,000.00
Johnson $30,000.00 $45,000.00
Wolff $45,000.00 $60,000.00
Adams $45,000.00 $60,000.00
Smyth $60,000.00 $75,000.00
我們發現,獲得這些表的查詢形式如下所示
SELECT DISTINCTROW Employees.Name, SalaryRanges.Min,
SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey
ORDER BY SalaryRanges.Min;
這種語言稱為結構化查詢語言,即 SQL,而且它是幾乎目前所有資料庫都可以使用的一種語言。SQL-92 標准被認為是一種基礎標准,而且已更新多次。
資料庫的種類
PC 上的資料庫,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。
資料庫伺服器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。
所有這些資料庫產品都支持多種相對類似的 SQL 方言,因此,所有資料庫最初看起來好象可以互換。每種資料庫都有不同的性能特徵,而且每一種都有不同的用戶界面和編程介面。
ODBC
如果我們能夠以某種方式編寫不依賴於特定廠商的資料庫的代碼,並且能夠不改變自己的調用程序即可從這些資料庫中得到相同的結果,那將是一件很好的事。如果我們可以僅為所有這些資料庫編寫一些封裝,使它們具有相似的編程介面,這種對資料庫編程獨立於供應商的特性將很容易實現。
什麼是 JDBC?
JDBC 是對 ODBC API 進行的一種面向對象的封裝和重新設計,它易於學習和使用,並且它真正能夠使您編寫不依賴廠商的代碼,用以查詢和操縱資料庫。盡管它與所有 Java API 一樣,都是面向對象的,但它並不是很高級別的對象集.
除 Microsoft 之外,多數廠商都採用了 JDBC,並為其資料庫提供了 JDBC 驅動程序;這使您可輕松地真正編寫幾乎完全不依賴資料庫的代碼。另外,JavaSoft 和 Intersolv 已開發了一種稱為 JDBC-ODBC Bridge 的產品,可使您連接還沒有直接的 JDBC 驅動程序的資料庫。支持 JDBC 的所有資料庫必須至少可以支持 SQL-92 標准。這在很大程度上實現了跨資料庫和平台的可移植性。
安裝和使用 JDBC
JDBC 的類都被歸到 java.sql 包中,在安裝 Java JDK 1.4時會自動安裝。然而,如果您想使用 JDBC-ODBC 橋。JDBC-ODBC 驅動程序可從 Sun 的 Java 網站 (http://java.sun.com/) 輕松地找到並下載。在您擴充並安裝了這個驅動程序後,必須執行下列步驟:
將 \jdbc-odbc\classes; 路徑添加到您的 PATH 環境變數中。
將 \jdbc-odbc\classes; 路徑添加到您的 CLASSPATH 環境變數中。
JDBC 驅動程序的類型
Java 程序連接資料庫的方法實際上有四種:
1. JDBC-ODBC 橋和 ODBC 驅動程序 -- 在這種方式下,這是一個本地解決方案,因為 ODBC 驅動程序和橋代碼必須出現在用戶的每台機器中。從根本上說這是一個臨時解決方案。
2. 本機代碼和 Java 驅動程序 -- 它用另一個本地解決方案(該平台上的 Java 可調用的本機代碼)取代 ODBC 和 JDBC-ODBC 橋。
3. JDBC 網路的純 Java 驅動程序 -- 由 Java 驅動程序翻譯的 JDBC 形成傳送給伺服器的獨立協議。然後,伺服器可連接任何數量的資料庫。這種方法使您可能從客戶機 Applet 中調用伺服器,並將結果返回到您的 Applet。在這種情況下,中間件軟體提供商可提供伺服器。
4. 本機協議 Java 驅動程序 -- Java 驅動程序直接轉換為該資料庫的協議並進行調用。這種方法也可以通過網路使用,而且可以在 Web 瀏覽器的 Applet 中顯示結果。在這種情況下,每個資料庫廠商將提供驅動程序。
如果您希望編寫代碼來處理 PC 客戶機資料庫,如 dBase、Foxbase 或 Access,則您可能會使用第一種方法,並且擁有用戶機器上的所有代碼。更大的客戶機-伺服器資料庫產品(如 IBM 的 DB2)已提供了第 3 級別的驅動程序。
兩層模型和三層模型
當資料庫和查詢它的應用程序在同一台機器上,而且沒有伺服器代碼的干預時,我們將生成的程序稱為兩層模型。一層是應用程序,而另一層是資料庫。在 JDBC-ODBC 橋系統中通常是這種情況。
當一個應用程序或 applet 調用伺服器,伺服器再去調用資料庫時,我們稱其為三層模型。當您調用稱為「伺服器」的程序時通常是這種情況。
編寫 JDBC 代碼訪問資料庫
用 ODBC 注冊您的資料庫
連接資料庫
所有與資料庫有關的對象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必須加入 "import java.sql.* "。 JDBC 要連接 ODBC 資料庫,您必須首先載入 JDBC-ODBC 橋驅動程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
該語句載入驅動程序,並創建該類的一個實例。然後,要連接一個特定的資料庫,您必須創建 Connect 類的一個實例,並使用 URL 語法連接資料庫。
String url = "jdbc:odbc:Northwind";
Connection con = DriverManager.getConnection(url);
請注意,您使用的資料庫名是您在 ODBC 設置面板中輸入的「數據源」名稱。
URL 語法可能因資料庫類型的不同而變化極大。
jdbc:subprotocol:subname
第一組字元代表連接協議,並且始終是 jdbc。還可能有一個子協議,在此處,子協議被指定為 odbc。它規定了一類資料庫的連通性機制。如果您要連接其它機器上的資料庫伺服器,可能也要指定該機器和一個子目錄:
jdbc:bark//doggie/elliott
最後,您可能要指定用戶名和口令,作為連接字元串的一部分:
jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof
訪問MSSQL Server方法:(驅動程序需要:msutil.jar,msbase.jar,mssqlServer.jar)
DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo
username=sa
password=
maxcon=10
mincon=1
poolName=SkyDev
利用我們開發的資料庫類,使用方法如下:
DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost",
1433, "demo", "sa", ""));
Connection con = DbO.getConnection();
//類代碼(不含連接工廠實現)
package skydev.moles.data;
public final class SqlServerConnectionFactory
extends ConnectionFactory {
private final String dbDriver =
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String host;
private int port;
private String databaseName;
public SqlServerConnectionFactory() {
super.setDriverName(dbDriver);
}
/**
*
* @param host 資料庫所在的主機名:如"localhost"
* @param port SQL伺服器運行的埠號,如果使用預設值 1433,傳入一個負數即可
* @param databaseName 資料庫名稱
* @param userName 用戶名
* @param password 口令
*/
public SqlServerConnectionFactory(String host,
int port,
String databaseName,
String userName,
String password) {
this.setHost(host);
this.setPort(port);
this.setDatabaseName(databaseName);
this.setUserName(userName);
this.setPassword(password);
init();
}
private void init() {
super.setDriverName(dbDriver);
super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" +
new Integer(port).toString() + ";DatabaseName=" +
databaseName.trim());
//super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo");
}
……
//------------------------------------------------------------------------------------
訪問MySQL的方法:
DBDriver=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost/demo
username=
password=
maxcon=5
mincon=1
poolName=zhengmao
訪問資料庫
一旦連接到資料庫,就可以請求表名以及表列的名稱和內容等信息,而且您可以運行 SQL 語句來查詢資料庫或者添加或修改其內容。可用來從資料庫中獲取信息的對象有:
DatabaseMetaData 有關整個資料庫的信息:表名、表的索引、資料庫產品的名稱和版本、資料庫支持的操作。
ResultSet 關於某個表的信息或一個查詢的結果。您必須逐行訪問數據行,但是您可以任何順序訪問列。
ResultSetMetaData 有關 ResultSet 中列的名稱和類型的信息。
盡管每個對象都有大量的方法讓您獲得資料庫元素的極為詳細的信息,但在每個對象中都有幾種主要的方法使您可獲得數據的最重要信息。然而,如果您希望看到比此處更多的信息,建議您學習文檔以獲得其餘方法的說明。
ResultSet
ResultSet 對象是 JDBC 中最重要的單個對象。從本質上講,它是對一個一般寬度和未知長度的表的一種抽象。幾乎所有的方法和查詢都將數據作為 ResultSet 返回。ResultSet 包含任意數量的命名列,您可以按名稱訪問這些列。它還包含一個或多個行,您可以按順序自上而下逐一訪問。在您使用 ResultSet 之前,必須查詢它包含多少個列。此信息存儲在 ResultSetMetaData 對象中。
//從元數據中獲得列數
ResultSetMetaData rsmd;
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
當您獲得一個 ResultSet 時,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,當沒有更多行時,該方法會返回 false。由於從資料庫中獲取數據可能會導致錯誤,您必須始終將結果集處理語句包括在一個 try 塊中。
您可以多種形式獲取 ResultSet 中的數據,這取決於每個列中存儲的數據類型。另外,您可以按列序號或列名獲取列的內容。請注意,列序號從 1 開始,而不是從 0 開始。ResultSet 對象的一些最常用方法如下所示。
getInt(int); 將序號為 int 的列的內容作為整數返回。
getInt(String); 將名稱為 String 的列的內容作為整數返回。
getFloat(int); 將序號為 int 的列的內容作為一個 float 型數返回。
getFloat(String); 將名稱為 String 的列的內容作為 float 型數返回。
getDate(int); 將序號為 int 的列的內容作為日期返回。
getDate(String); 將名稱為 String 的列的內容作為日期返回。
next(); 將行指針移到下一行。如果沒有剩餘行,則返回 false。
Close(); 關閉結果集。
getMetaData(); 返回 ResultSetMetaData 對象。
ResultSetMetaData
您使用 getMetaData() 方法從 ResultSet 中獲取 ResultSetMetaData 對象。您可以使用此對象獲得列的數目和類型以及每一列的名稱。
getColumnCount(); 返回 ResultSet 中的列數。
getColumnName(int); 返回列序號為 int 的列名。
getColumnLabel(int); 返回此列暗含的標簽。
isCurrency(int); 如果此列包含帶有貨幣單位的一個數字,則返回 true。
isReadOnly(int); 如果此列為只讀,則返回 true。
isAutoIncrement(int); 如果此列自動遞增,則返回 true。這類列通常為鍵,而且始終是只讀的。
getColumnType(int); 返回此列的 SQL 數據類型。這些數據類型包括
BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGER
LONGVARBINARY
LONGVARCHAR
NULL
NUMERIC
OTHER
REAL
SMALLINT
TIME
TIMESTAMP
TINYINT
VARBINARY
VARCHAR
DatabaseMetaData
DatabaseMetaData 對象可為您提供整個資料庫的信息。您主要用它獲取資料庫中表的名稱,以及表中列的名稱。由於不同的資料庫支持不同的 SQL 變體,因此,也有多種方法查詢資料庫支持哪些 SQL 方法。
getCatalogs() 返回該資料庫中的信息目錄列表。使用 JDBC-ODBC Bridge 驅動程序,您可以獲得用 ODBC 注冊的資料庫列表。這很少用於 JDBC-ODBC 資料庫。
getTables(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表的說明。
getColumns(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表列說明。
getURL(); 獲得您所連接的 URL 名稱。
getDriverName(); 獲得您所連接的資料庫驅動程序的名稱。
獲取有關表的信息
您可以使用 DataBaseMetaData 的 getTables() 方法來獲取資料庫中表的信息。這個方法有如下4個 String 參數:
results =dma.getTables(catalog, schema, tablemask, types[]);
其中參數的意義是:
Catalog 要在其中查找表名的目錄名。對於 JDBC-ODBC 資料庫以及許多其他資料庫而言,可將其設置為 null。這些資料庫的目錄項實際上是它在文件系統中的絕對路徑名稱。
Schema 要包括的資料庫「方案」。許多資料庫不支持方案,而對另一些資料庫而言,它代表資料庫所有者的用戶名。一般將它設置為 null。
Tablemask 一個掩碼,用來描述您要檢索的表的名稱。如果您希望檢索所有表名,則將其設為通配符 %。請注意,SQL 中的通配符是 % 符號,而不是一般 PC 用戶的 * 符號。
types[] 這是描述您要檢索的表的類型的 String 數組。資料庫中通常包括許多用於內部處理的表,而對作為用戶的您沒什麼價值。如果它是空值,則您會得到所有這些表。如果您將其設為包含字元串「TABLES」的單元素數組,您將僅獲得對用戶有用的表格。
一個簡單的 JDBC 程序
我們已經學習了 JDBC 的所有基本功能,現在我們可以編寫一個簡單的程序,該程序打開資料庫,列印它的表名以及某一表列的內容,然後對該資料庫執行查詢。此程序如下所示:
package skydevkit;
import java.sql.*;
public class JdbcOdbc_test {
ResultSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dma;
Connection con;
public JdbcOdbc_test() throws SQLException {
String url = "jdbc:odbc:Northwind";
try {
//載入 JDBC-ODBC 橋驅動程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url);//連接資料庫
dma = con.getMetaData();//獲取資料庫的元數據
System.out.println("Connected to:" + dma.getURL());
System.out.println("Driver " + dma.getDriverName());
} catch (Exception e) {
System.out.println(e);
}
try {
Statement stmt = con.createStatement();
results = stmt.executeQuery("select * from 客戶;");
ResultSetMetaData resultMetaData = results.getMetaData();
int cols = resultMetaData.getColumnCount();
String resultRow = "";
for (int i = 1; i < cols; i++) {
resultRow += resultMetaData.getColumnName(i) + ";";
}
System.out.println(resultRow);
while (results.next()) {
resultRow = "";
for (int i = 1; i < cols; i++) {
try {
resultRow += results.getString(i) + ";";
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
System.out.println(resultRow);
}
} catch (Exception e) {
System.out.println("query exception");
} finally {
results.close();
}
}
}
補充高級內容
關於調用SQLServer存儲過程的例子:(用到了我們開發的資料庫連接類)
CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10))
AS
Select * from Students where [Name]=@name
GO
DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost",
1433, "demo", "sa", ""));
Connection con = DbO.getConnection();
CallableStatement pstmt = null;
System.out.println("TestDB1()............");
/* try {
pstmt = con.prepareCall("{call sp_getStudentById(?)}");
pstmt.setInt(1, 1);
}*/
try {
pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意參數如何傳遞
pstmt.setString(1, "Tom");
}
……
使用輸出參數:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values (@name,@age)
select @id=@@IDENTITY
GO
try {
pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}");
pstmt.setString(1, "zengqingsong");
pstmt.setInt(2, 22);
pstmt.registerOutParameter(3, Types.INTEGER);
pstmt.executeUpdate();
int id = pstmt.getInt(3);
System.out.println(id);
}
使用返回參數的例子:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values (@name,@age)
select @id=@@IDENTITY –測試輸出參數
return 30 –測試返回30
GO
try {
pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}");
pstmt.setString(2, "zengqingsong");
pstmt.setInt(3, 22);
pstmt.registerOutParameter(4, Types.INTEGER);
pstmt.registerOutParameter(1, Types.INTEGER);
int ret = pstmt.executeUpdate(); //執行影響的行數
int ret2 = pstmt.getInt(1); //返回參數(輸出參數)
int id = pstmt.getInt(4); //輸出參數
System.out.println(ret);
System.out.println(ret2);
System.out.println(id);
7. 資料庫中第一範式,第二範式,第三範式、、、、是什麼,怎麼區分
第一範式:一言以蔽之:「第一範式的數據表必須是二維數據表」,第一範式是指資料庫的每一列都是不可分割的基本數據項,強調列的原子性,試題中某一屬性不能擁有幾個值。比如資料庫的電話號碼屬性裡面不可以有固定電話和行動電話值。 說明:在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
第二範式建立在第一範式的基礎上,即滿足第二範式一定滿足第一範式,第二範式要求數據表每一個實例或者行必須被唯一標識。除滿足第一範式外還有兩個條件,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。每一行的數據只能與其中一列相關,即一行數據只做一件事。只要數據列中出現數據重復,就要把表拆分開來。
第三範式若某一範式是第二範式,且每一個非主屬性都不傳遞依賴於該範式的候選鍵,則稱為第三範式,即不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的情況。
(7)資料庫第一級擴展閱讀:
範式是符合某一種級別的關系模式的集合。關系資料庫中的關系必須滿足一定的要求,滿足不同程度要求的為不同範式。
8. 資料庫體系結構分為三級:外部級、概念級和什麼
資料庫的體系結構分成三級:外部級、概念級和內部級。
1、外部級
外部級最接近用戶是單個用戶所能看到的數據特徵,單個用戶使用的數據視圖的描述稱為「外模式」。
2、概念級
概念級涉及到所有用戶的數據定義,也就是全局性的數據視圖,全局數據視圖的描述稱為「概念模式」。
3、內部級
內部級最接近於物理存儲設備,涉及到物理數據存儲的結構。物理視圖的描述稱為「內模式」。
拓展資料:
資料庫的三級模式是資料庫在三個級別(層次)上的抽象,使用戶能夠邏輯地、抽象地處理數據而不必關心數據在計算機中的物理表示和存儲。
實際上
,對於一個資料庫系統而言一有物理級資料庫是客觀存在的,它是進行資料庫操作的基礎,概念級資料庫中不過是物理資料庫的一種邏輯的、抽象的描述(即模式),用戶級資料庫則是用戶與資料庫的介面,它是概念級資料庫的一個子集(外模式)。
9. 資料庫管理員的等級
DBA的等級並不是很嚴格的。按照對資料庫的掌握情況,我簡單地分成三個等級:初級Primary、中級Intermediate和高級Senior。
初級DBA又稱為DBBS,是英文Database Baby Sitter的縮寫。初級DBA常常是兼職的,他們往往同時是程序員或者兼任其他的工作。初級DBA往往把個人簡歷寫得很棒,參與了很多和資料庫有關的項目或工作。但是,這些項目或者工作往往是:第三方軟體供應商已經安裝並配置了資料庫,他們只做一些監控的工作。他們能處理一些簡單的問題,但大多數時候他們向應用軟體供應商求救。初級DBA更喜歡圖形化的資料庫管理或者監控工具,他們喜歡Access這樣的桌面資料庫簡單易用,並把這些小型資料庫的經驗簡單地應用到大型資料庫相關的工作中。
初級DBA是最好區分的。而中級DBA和高級DBA就不太好區分。他們的差別在於經驗的不同和個性特點、能力方面的差異。中級DBA比較多,他們可以勝任高級DBA的大部分工作,包括:
1、資料庫安裝;
2、資料庫配置和管理;
3、許可權設置和安全管理;
4、監控和性能調節;
5、備份和恢復;
6、解決一般的問題;
中級DBA往往從業一年左右,熟悉某種操作系統環境下的資料庫。因為對中級DBA來講,Windows NT和Unix是有很大差別的。中級DBA對SQL比較熟悉,他們自己購買了幾本資料庫方面的書籍,並深入鑽研。中級DBA往往同時兼任資料庫程序員,他們的工作對性能、穩定性、安全性的追求基本上不是很高,往往配合高級DBA做一些例行工作。
高級DBA在國內是非常少的。他們能夠熟練閱讀資料庫方面的英文資料,並且都熟悉很多種操作平台下的幾種大型資料庫。他們知道各種不同資料庫在不同環境下的優勢和劣勢,並能在資料庫平台和資料庫環境的選擇方面做出決策。他們一般通曉系統架構和資料庫設計,並能對資料庫進行各種級別的優化。高級DBA一般都配有助手,他們更偏向做決策和計劃。高級DBA往往在銀行業、保險業、在線交易等對穩定性、安全性、性能都要求比較高的關鍵業務處理領域大顯身手。
很多時候,是否取得資料庫專家認證證書並不是很重要。很多資料庫廠商的培訓只要你去了都會獲得證書。有很多的公司提供商業化的培訓,他們的服務質量也有好有劣。所以證書並不是特別地有意義。
10. 資料庫工程師的等級
資料庫工程師的等級並不是很嚴格的。按照對資料庫的掌握情況,可以分成三個等級:初級Primary、中級Intermediate和高級Senior。
初級資料庫工程師又稱為DBBS,是英文Database Baby Sitter的縮寫。初級資料庫工程師常常是兼職的,他們往往同時是程序員或者兼任其他的工作。初級資料庫工程師往往把個人簡歷寫得很棒,參與了很多和資料庫有關的項目或工作。但是,這些項目或者工作往往是:第三方軟體供應商已經安裝並配置了資料庫,他們只做一些監控的工作。他們能處理一些簡單的問題,但大多數時候他們向應用軟體供應商求救。初級資料庫工程師更喜歡圖形化的資料庫管理或者監控工具,他們喜歡Access這樣的桌面資料庫簡單易用,並把這些小型資料庫的經驗簡單地應用到大型資料庫相關的工作中。
初級資料庫工程師是最好區分的。而中級資料庫工程師和高級資料庫工程師就不太好區分。他們的差別在於經驗的不同和個性特點、能力方面的差異。中級資料庫工程師比較多,他們可以勝任高級資料庫工程師的大部分工作,包括:
1)資料庫安裝;
2)資料庫配置和管理;
3)許可權設置和安全管理;
4)監控和性能調節;
5)備份和恢復;
6)解決一般的問題;
中級資料庫工程師往往從業一年左右,熟悉某種操作系統環境下的資料庫。因為對中級資料庫工程師來講,Windows NT和Unix是有很大差別的。中級資料庫工程師對SQL比較熟悉,他們自己購買了幾本資料庫方面的書籍,並深入鑽研。中級資料庫工程師往往同時兼任資料庫程序員,他們的工作對性能、穩定性、安全性的追求基本上不是很高,往往配合高級資料庫工程師做一些例行工作。
高級資料庫工程師在國內是非常少的。他們能夠熟練閱讀資料庫方面的英文資料,並且都熟悉很多種操作平台下的幾種大型資料庫。他們知道各種不同資料庫在不同環境下的優勢和劣勢,並能在資料庫平台和資料庫環境的選擇方面做出決策。他們一般通曉系統架構和資料庫設計,並能對資料庫進行各種級別的優化。高級資料庫工程師一般都配有助手,他們更偏向做決策和計劃。高級資料庫工程師往往在銀行業、保險業、在線交易等對穩定性、安全性、性能都要求比較高的關鍵業務處理領域大顯身手。
很多時候,是否取得資料庫專家認證證書並不是很重要。很多資料庫廠商的培訓只要你去了都會獲得證書。有很多的公司提供商業化的培訓,他們的服務質量也有好有劣。所以證書並不是特別地有意義。