❶ 求一篇基於web的資料庫設計社會實踐調查報告
《基於web的資料庫設計實踐》
The Database Design Based On WEB Used In Remote Concurrent Design
Abstract: the paper analyses the database characteristics used in the remote concurrent proct design system based on Internet, deeply researches the database structure, interface and the method of the data safety.
Keywords: Internet, remote concurrent design, database based on Web
近年來,隨著Web技術的蓬勃發展,人們已不滿足於只在瀏覽器上獲取靜態的信息,想要通過它發表意見、查詢數據。隨著電子商務的普及人們開始參與一些網路商務活動,這就迫切需要實現Web與資料庫的互連[1]。產品異地並行設計對數據的要求有一定的特殊性,主要有(1)產品數據多種多樣。產品設計,特別是機械產品設計常常是大型而又復雜,在異地通過不同的設計小組,按不同的分工設計同一產品,所要管理和通訊的數據類型隨著分工的不同而有不同的表現形式,如常規的數字組成的數據集,以圖形、圖象形式表達的產品模型數據,以文字形式描述設計的文檔,還有圖表、公式等形式,復雜多樣。(2)產品數據交換頻繁,流量大。產品設計是一個協同工作的創造性集體智慧凝聚的過程,要使設計順利進行,分布在異地的不同設計小組之間就要經常性地進行數據交換,並且有些形式表達的產品數據是較大的文件。(3)產品數據的一致性要求高。分工合作的不同設計小組之間的設計任務是彼此關聯,互相依賴的。如果其中一個數據改變了,相關聯的數據必須跟著改變,在Web資料庫設計時必須考慮數據的一致性問題。(4)產品數據的並發性訪問頻繁。由於異地產品設計的特殊屬性,數據的並發性訪問非常頻繁。所以,進行基於Internet的產品異地並行設計的Web資料庫設計與一般的電子商務不同,要充分考慮以上屬性。本文結合我們近期開發的機械產品異地並行設計系統(RCDS, Remote Concurrent Design System),綜合比較了多種當今流行的網路數據存取技術,設計出可靠安全的資料庫系統。
1 Web資料庫連接方案
1.1資料庫連接方案選擇
RDO、DAO和ADO是比較常見的Web資料庫訪問技術。
DAO (Data Access Objects) 數據訪問對象是第一個面向對象的介面,它含有 Microsoft Jet 資料庫引擎(由 Microsoft Access 所使用),並允許 Visual Basic 開發者通過 ODBC 象連接到其他資料庫一樣,直接訪問到 Access 表。DAO 最適用於單系統應用程序或小范圍本地分布使用,對大范圍的異地並行設計顯得功能不夠強大。
RDO (Remote Data Objects) 遠程數據對象是一個到 ODBC 的、面向對象的數據訪問介面,它同易於使用的 DAO style組合在一起,提供了一個介面,形式上展示出所有 ODBC 的底層功能和靈活性。RDO 在訪問 Jet 或 ISAM 資料庫方面有一定的限制,而且它只能通過現存的 ODBC 驅動程序來訪問關系資料庫。但是,RDO 已被證明是許多 SQL Server、Oracle
以及其他大型關系資料庫開發者經常選用的最佳介面。RDO 提供了用來訪問存儲過程和復雜結果集的更多和更復雜的對象、屬性,以及方法。對異地並行設計Web資料庫來說也不是十分理想。
ADO(ActiveX Data Objects)為ActiveX組件中資料庫訪問組件,ASP就是通過它實現對資料庫的訪問。ADO 是 DAO、RDO 的後繼產物。ADO 2.0在功能上與 RDO 更相似,而且一般來說,在這兩種模型之間有一種相似的映射關系。ADO 「擴展」了 DAO 和 RDO 所使用的對象模型,這意味著它包含較少的對象、更多的屬性、方法(和參數),以及事件。例如,ADO 沒有與 rdoEngine 和 rdoEnvironment 對象相等同的對象,可以包含 ODBC 驅動程序管理器和 hEnv 介面。盡管事實上介面可能是通過 ODBC OLE DB 服務提供程序實現的,但目前也不能從 ADO 中創建 ODBC 數據源。ADO 是為 Microsoft最新和最強大的數據訪問範例 OLE DB 而設計的,是一個便於使用的應用程序層介面。OLE DB 為任何數據源提供了高性能的訪問,這些數據源包括關系和非關系資料庫、電子郵件和文件系統、文本和圖形、自定義業務對象等等。ADO 在關鍵的 Internet 方案中使用最少的網路流量,並且在前端和數據源之間使用最少的層數,所有這些都是為了提供輕量、高性能的介面。同時 ADO 使用了與 DAO和 RDO相似的約定和特性,簡化的語義使它更易於學習。
ADO最早是在IIS中引入的,主要用於ASP,用ADO可以使伺服器端的腳本通過ODBC存取和操縱資料庫伺服器的數據。使用ADO的對象可以建立和管理資料庫的連接,從資料庫伺服器請求和獲取數據,執行更新、刪除、添加數據、獲取ODBC的錯誤信息等。ADO是ASP方案中最具吸引力的資料庫連接控制項,它為用戶提供了連接任何兼容ODBC的資料庫以及創建全功能資料庫應用程序的能力。
ADO具有簡單易用、高速、佔用資源少等的優點。不同於DAO和RDO,ADO有著更高的執行效率。ADO 對象模型如圖1a所示。每個 Connection、Command、Recordset 和 Field 對象都有 Properties 集合,如圖1b所示。
a) b)
圖1 ADO對象模型及屬性
應該說,ADO是微軟的下一代資料庫連接技術,用來全面取代RDO和DAO的數據訪問工具。從發展趨勢來看,ADO今後將逐步替代老的DAO特別是RDO數據訪問介面,成為新的遠程數據訪問方法。所以,選擇ADO作為產品異地並行設計的Web資料庫介面技術是合適的。
1.2 ADO應用分析
ADO 並不是自動和現存的數據訪問應用程序代碼兼容的。當 ADO 封裝 DAO 和 RDO 的功能性的時候,必須將許多語言要素轉換為 ADO 語法。在某些情況下,這將意味著要對現存代碼的某些功能做一個簡單轉換。在其他情況下,最佳的做法可能是用 ADO 的新功能重寫該應用程序。
包含在 DAO 和 RDO 模型中的許多功能被合並為單個對象,這樣就生成了一個簡單得多的對象模型。然而,由於這個原因,起初可能會覺得找到合適的 ADO 對象、集合、屬性、方法,或事件非常困難。與 DAO 和 RDO不同的是,盡管 ADO 對象是分層結構的,但在分層結構范圍之外也是可以創建的。同時,也應當注意,ADO 當前並不支持 DAO 的所有功能。ADO 主要包括 RDO 風格的功能性,以便和 OLE DB 數據源交互,另外還包括遠程和 DHTML 技術。
一般說來,在 ADO 的演化過程中,馬上把大多數 DAO 應用程序(except possibly是那些使用 ODBCDirect 的應用程序)移植到 ADO 上為時太早,因為當前的 ADO 並不支持數據定義 (DDL)、用戶、組等等。不過,如果只將 DAO 用於客戶—伺服器應用程序,並不依賴於 Jet 資料庫引擎或不使用 DDL,那麼就可能移植到 ADO。最終,Microsoft 將提供一個 ADO DDL 組件來幫助進行 DAO 到 ADO 的移植,並為 OLE DB 供應商提供一般的 DDL 支持。
在ASP中使用ADO技術來訪問Web資料庫,其應用前景是無可估量的。原理圖如下:
圖2 ADO在ASP程序中的應用
2 Web資料庫管理系統
常見的資料庫類型有面向對象的資料庫(OODB)和關系型資料庫。OODB對主流資料庫應用開發來說是相當新穎的,使用OODB使應用程序中的數據對象與現實世界中的對象一一對應,面向對象資料庫擴充了對象模型。一個常用的對象模型是由對象資料庫管理組(ODMG)開發出來,具有比傳統的關系資料庫更優越的性能,但畢竟在目前還是一種探索階段,暫時還未有相應的技術普及。
關系資料庫已經是資料庫體系的世界標准。當開發一個數據驅動應用程序時,大多數情況下用戶需要訪問網路(如Internet、Intranet等)上的數據信息,就RCDS就是建立在網路的信息通訊之上,是完全的客戶機/伺服器應用程序。
SQL Server是一個可縮放、高性能的關系型資料庫管理系統(RDBMS),它的設計是為了滿足分布式客戶/伺服器計算的需要,允許客戶應用程序使用幾個特定的工具和技術控制從伺服器檢索的數據。這些包括觸發器、存儲過程和規則的選項。因此,系統採用MS SQL Server7.0作為後台資料庫。
3 Web資料庫結構
數據模型通常有層次模型、網狀模型、關系模型及OO(面向對象)模型等。其中關系模型是建立在數學概念基礎之上的一種模型,由若干個關系框架組成的集合,它也是到目前為止最為成熟的一種資料庫類型。本文RCDS採用MS SQL Server作為後台資料庫,根據資料庫工具和資料庫特點,開發出一套可靠健壯的數據存儲方案。
整個資料庫共有AdminData、ChatNames、DesignUnits、Message、OnlineUnits、Procts、RqtTasks、RqtTaskUnits、RqtDesignUnits、ShareData、Tasks、TaskUnits和UploadFiles等表格。在建立數據模型的時候首先考慮是要避免重復數據,也就是建立規范化資料庫。規范化資料庫可以通過被稱為範式水平的指標來衡量,級別有第一範式、第二範式和第三範式,通常第三範式就是要達到的目標,因為它提供了數據冗餘和開發簡易性之間的最好折衷。
RCDS資料庫正是按照第三範式標准來設計的,它保證了模型的精簡和表格的緊湊性。而第三範式標准也最大發揮了關系資料庫的優勢,圖3是部分表格的視圖鏈接情況。
圖3 關系表格視圖
4.1 並發控制的處理
在多個用戶同時訪問一個資料庫時就產生並發問題,特別是在其中一些用戶對資料庫有添加或刪除修改等操作時,那麼其他所獲得的數據可能是一塌糊塗,甚至造成整個數據訪問的沖突、終止,從而使系統發生混亂以至崩潰。RCDS採用的解決辦法是鎖定技術,總體上分為共享鎖定和排它鎖定兩種類型(如圖4)。前者是指同時有幾個過程共享一個鎖定,比如一個用戶(或客戶)正在讀取一個數據,雖然在這之前他已經對該數據設置了鎖(LOCK),但其他用戶同樣可以(也只能是)讀取它。而排他鎖定一般應用於對數據進行修改或更新(包括添加刪除等)操作,即是用戶在修改一個數據之前設置了鎖定,在一定的時間里其他用戶是不能訪問到該數據的,只有等待鎖定解除(UNLOCK)才能進行訪問到它,當然在計算機處理的時候,其他的用戶一般是感覺不到有這個等待時間的。通過這樣的處理,就保證了數據的一致性。
a) 共享鎖定
b) 排它鎖定
圖4 安全鎖定類型
在ADO進行資料庫操作時,它的鎖定類型相對來說復雜一些。打開記錄集時,可以指定鎖定類型。鎖定類型決定了當不止一個用戶同時試圖改變一個記錄時,資料庫應如何處理。ADO中的鎖定主要有以下四種類型:
l AdLockReadOnly 指定你不能修改記錄集中的記錄
l AdLockPessimistic 指定在編輯一個記錄時,立即鎖定它
l AdLockOptimstic 指定只有調用記錄集的Update方法時,才鎖定記錄
l AdLockBatchOptimstic 指定記錄只能成批地更新
在預設情況下,記錄集使用只讀鎖定。要指定不同的鎖定類型,可以在打開記錄集時包含這些鎖定常量之一。部分代碼如下:
… …
Set MyConn=Sever.CreateObject(「ADODB.Connection」)
//定義資料庫連接MyConn
Set RS=Sever.CreateObject(「ADODB.RecordSet」)
//定義返回數據記錄集
MyConn.Open 「ByktDB.dsn」//建立應用程序與數據源的連接
RS.Open 「SELECT * FROM Mytable」, MyConn, adOpenDynamic, adLockPessimistic
//進行資料庫操作,並且設置鎖定
RS.Close
MyConn.Close
… …
4.2產品數據一致性處理
數據的安全因素除了前面所提到的並行控制之外,還要考慮事務處理。網路資料庫有其不同的地方,例如:假設某個時間有一個設計人員在你的站點上索取一些設計信息,有關的設計信息存儲在兩個表中。一個表用來保存該設計者的信息,另一個表包含了要索取的設計信息。該設計人員的信息已經輸入了第一個表中。但是,就在這時,發生了意外情況,一道閃電擊中了你的伺服器,使第二個表沒有被更新。在這種情況下,一個健壯的系統就必須保證最後的結果是兩個表都沒有被更新過。這時候事務處理就發揮了重要的功效。
使用事務處理,你可以防止第二個表沒有被更新而第一個表被更新的情況出現:當一組語句構成一個事務處理時,如果一個語句沒有執行成功,則所有的語句都不成功。不管是針對多個表,還是進行表內多個記錄的操作,它們所需要的安全保證是一樣的。事務處理的實現代碼如下:
… …
Set MyConn=Sever.CreateObject(「ADODB.Connection」)
MyConn.Open 「ByktDB.dsn」
MyConn.BeginTrans //事務處理開始
MyConn.Execute 「INSERT DataTable(Num) Values(『3628』)」
MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」
MyConn.CommitTrans //事務處理結束
MyConn.Close
… …
在上面這段代碼中,用BeginTrans方法和CommitTrans方法來標記事務處理的開始和結束。在BeginTrans方法被調用之後,CommitTRans方法被調用之前,不管出現什麼錯誤,兩個表都不會被更新,在這個過程中所有處理的數據都保持了完全可靠的一致性。