· 什么是數據庫?
數據庫 是以某種文件結構存儲的一系列信息表,這種文件結構使您能夠訪問這些表、選擇表中的列、對表進行排序以及根據各種標準選擇行。數據庫通常有多個 索引 與這些表中的許多列相關聯,所以我們能盡可能快地訪問這些表。在進行計算時,數據庫比其它類型的結構更常用。您會發現在員工記錄和薪資系統中數據庫處于核心地位,在旅行計劃系統中以及在產品生產和銷售的整個過程中都可以發現數據庫。
以員工記錄為例,您可以設想一個含有員工姓名、地址、工資、扣稅以及津貼等內容的表。讓我們考慮一下這些內容可能如何組織在一起。您可以設想一個表包含員工姓名、地址和電話號碼。您希望保存的其它信息可能包括工資、工資范圍、上次加薪時間、下次加薪時間、員工業績評定等內容。
這些內容是否應保存在一個表格中?幾乎可以肯定不應該如此。不同類別的員工的工資范圍可能沒有區別;這樣,您可以僅將員工類型儲存在員工記錄表中,而將工資范圍儲存在另一個表中,通過類型編號與這個表關聯??紤]以下情況:
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 |
Adams | $45,000.00 | $60,000.00 |
Johnson | $30,000.00 | $45,000.00 |
Smyth | $60,000.00 | $75,000.00 |
Tully | $30,000.00 | $45,000.00 |
Wolff | $45,000.00 | $60,000.00 |
或者,按照工資遞增的順序排序
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 |
我們發現,獲得這些表的查詢形式如下所示
CCCCCC"> SELECT DISTINCTROW Employees.Name, SalaryRanges.Min, SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey ORDER BY SalaryRanges.Min; |
· 數據庫的種類
由于 PC 已成為主要的辦公工具,因此,已開發出在 PC 上的大量流行的數據庫,這些數據庫都是可以自管理的。它們包括初級數據庫,如 MicrosoftWorks ,還包括更為復雜的數據庫,如 Approach 、 dBase 、 Borland Paradox 、 Microsoft Aclearcase/" target="_blank" >ccess 和 FoxBase 。另一類PC數據庫包括那些可由許多PC客戶機通過服務器訪問的數據庫。其中包括IBM DB/2、Microsoft SQL Server、Oracle、Sybase、SQLBase和XDB。所有這些數據庫產品都支持多種相對類似的SQL方言,因此,所有數據庫最初看起來好象可以互換。當然,它們 不能 互換的原因是每種數據庫都有不同的性能特征,而且每一種都有不同的用戶界面和編程接口。您可能會想,既然它們都支持SQL,對它們進行的編程也應該相似,但這是絕對錯誤的,因為每種數據庫都使用其自己方式接收SQL查詢,并使用其自己的方式返回結果。這就自然引出了一種新一代的標準:ODBC
· ODBC
如果我們能夠以某種方式編寫不依賴于特定廠商的數據庫的代碼,并且能夠不改變自己的調用程序即可從這些數據庫中得到相同的結果,那將是一件很好的事。如果我們可以僅為所有這些數據庫編寫一些封裝,使它們具有相似的編程接口,這種對數據庫編程獨立于供應商的特性將很容易實現。Microsoft于1992年首先嘗試了這一技巧,該公司發布了一個規范,稱為對象數據庫連接性。這被認為是在Windows環境下連接所有數據庫的答案。與所有軟件的第一個版本相同,它也經歷了一些發展的困擾,在1994年推出了另一個版本,該版本運行速度更快,而且更為穩定。它也是第一個32位的版本。另外,ODBC開始向Windows之外的其它平臺發展,到目前為止,它在PC和工作站領域已十分普遍。幾乎每個主要的數據庫廠商都提供ODBC驅動程序。
然而,ODBC并不是我們最初想象的靈丹妙藥。許多數據庫廠商都將ODBC作為其標準接口之外的“備選接口”,而且對ODBC的編程微不足道。與其它Windows編程一樣,它包括句柄、指針和選項,使其難以掌握。最后一點,ODBC不是中立的標準。它由Microsoft公司開發,并由該公司不斷改進,而微軟同時也推出了我們所有人所使用的極具競爭性的軟件平臺,這使得ODBC的未來難以預測。
· 什么是JDBC?
JDBC 是一組首字母縮寫,曾經代表 “Java DataBaseConnectivity” ,但現在它本身已成為一個商標符號。它是對 ODBC API 進行的一種面向對象的封裝和重新設計,它易于學習和使用,并且它真正能夠使您編寫不依賴廠商的代碼,用以查詢和操縱數據庫。盡管它與所有 Java API 一樣,都是面向對象的,但它并不是很高級別的對象集,在本章的剩余部分,我們將提出更高級別的方法。除Microsoft之外,多數廠商都采用了JDBC,并為其數據庫提供了JDBC驅動程序;這使您可輕松地真正編寫幾乎完全不依賴數據庫的代碼。另外,JavaSoft和Intersolv已開發了一種稱為JDBC-ODBCBridge的產品,可使您連接還沒有直接的JDBC驅動程序的數據庫。支持JDBC的所有數據庫必須至少可以支持SQL-92標準。這在很大程度上實現了跨數據庫和平臺的可移植性。
(未完待續)
原文轉自:http://www.anti-gravitydesign.com