前言:中文期刊網精心挑選了對象數據庫范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。
對象數據庫范文1
面向對象
數據庫系統
[論文摘要]面向對象數據庫系統是為了滿足新的數據庫應用需要而產生的新一代數據庫系統。討論和設計了面向對象數據庫的理論概念和含義,設計和構建了一個面向對象的數據庫系統的理論體系。
隨著應用的擴展,特別是諸如人工智能等復雜應用的需要,關系型數據庫已經顯得力不從心了,人們迫切希望產生一種新的數據庫解決方案來適應這些復雜需求。今后,面向對象的數據庫極有可能是數據庫 發展 的方向。
1面向對象數據庫模型
1.1核心概念
1.i .1對象與對象標識
對象,是現實世界中實體的抽象,是數據和操作的集合,是持久化到數據庫中的最小的存儲單位。
這里的對象其實與一般的面向對象程序設計語言中的對象并沒有很大不同。但是,這里的對象是持久性的。數據庫中的對象是數據記錄的最小單位,也就是說,數據庫中至少存在一個對象才有意義。當然,對象中還可以有對象的屬性,方法等,但一個對象必須是完整的。
對象標識,指的是唯一標定一個對象的標志,一個對象對應一個標識符。在現實世界中,對象可能會隨著時間的推移而發生改變,但對象標識不應該改變,因此,對象標識自對象生成后就不應該再改變,否則無法使用對象標識唯一確定一個對象了。即使兩個對象的屬性和方法以及狀態完全一致,只要其對象標識不同,則兩者是不同的對象。
對象標識一般有以下三種實現方式川(e}‘一r}sz}:
(1)值標識,使用對象的某一屬性作為其對象標識,不推薦此方式。
(2)名標識,使用一個名字來表示標識。推薦此種方式。
(3)內標識,以上兩種方式是由用戶建立的,而這種方式是由系統內部建立的,不具有任何實際含義,且只有系統才可以“觀察”此類對象標識。
另外,在對象數據庫中,標識是永久不變的,即具有永久持久性,這和面向對象程序中的對象標識不一樣,面向對象程序中的對象標識只具有對象內持久性。
1. 1.2封裝
抽象是對象的外部界面與內部實現之間實行清晰隔離的一種抽象,外部與對象的通信只能通過消息來實現[2)(e3o6-r}s6>。在對象數據庫中,表現為對象的私有和保護成員只能通過其方法來查詢得到,而公有成員可以直接查詢。這種方式的優點是對象被封裝成了自含的單元,對象只接受已定義好的操作,其他對象不能直接訪問對象的非公有成員。缺點是喪失了傳統關系數據庫中進行即席的、按內容的查詢,這就不夠方便靈活了,因此,需要做一些改進和妥協。
1 .1 .3類
共享同一屬性和方法集的所有對象構成的對象類,一個對象是一個類的實例。在數據庫是一種抽象的數據類型,相當于關系數據庫中的一張表。
1. 1.4類層次
這里涉及到繼承的概念,即類可以繼承類,從而具有與父類(或稱超類)的所有符合條件(只保護類型或公有類型)的屬性和方法。這是關系數據庫中所沒有的。
1. 1.5消息
指的是對象的方法調用。通過對象的方法調用可以訪問對象的屬性數據和執行業務邏輯。這也是關系數據庫中沒有的。
1 .2對象與對象標識
1 .2. 1對象結構
包括兩部分,一個是屬性集合,一個是方法集合。屬性集合將用于存儲數據,方法集合將用于操作數據。屬性集合即是對象的成員變量,其中又可以分為公有類型的成員、私有類型的成員和保護類型的成員。公有類型的成員可以直接使用查詢語句進行查詢,保護型成員可以在該類的子類的對象中直接訪問,私有類型的成員只能在本類的對象中訪問,外部對象只能通過實現定義好的方法(即操作)進行訪問。如果沒有事先定義好的方法,則外部將無法訪問這些變量的值,這就實現了對象的封裝性了。在00數據庫中,對象結構同樣分成這兩種集合。
1.2.2對象標識
表示在一個數據庫中一個對象僅有一個唯一不變的標識就是對象標識。這個標識用來精確定位一個對象。在00數據庫中,對象標識是唯一標定這一持久性存儲單元的唯一依據。其它對象或方法訪問本對象的屬性和方法必須先找到該對象的對象標識,否則無法訪問。
1.2.3封裝
即將一個對象的屬性和方法封裝在對象內部,外部只能通過對象提供的外部接口進行訪問。這樣就提高了數據的安全性和代碼的重用性。
i.3類與類層次
相似對象的集合稱為類,在數據庫中表現為面向對象數據庫模式的集合,它規定了該類的對象的數據結構規則和操作規則。在面向對象數據庫中,一個類相當于關系數據庫中的一張表。它同樣有字段和屬性,甚至還有關系數據庫表所沒有的方法。這種思路將使得可以在面向對象數據庫中實現復雜的邏輯。
類層次表現在繼承上,即父類和子類的層級關系。這是為了多態和數據共享的目的。這種思路可以象java中那樣使用接口和基類來完成設計。
1.4繼承
就像類層次中所說的,繼承是為了多態和數據共享的目的,也是面向對象代碼重用的重要機制之一。
i.5滯后聯編
即實現了重載的效果,oodbms不能在編譯時把操作名聯編到程序上,必須在運行時根據需要進行抉擇。
1.6對象的嵌套
是一種設計模式—組合。將多個類的對象加人到一個類的屬性中,使之實現復雜的功能。
2面向對象數據庫語言
ool}b語言用于描述面向對象數據庫模式,說明并操作類定義和對象實例。oodb語言主要包括對象定義語言(odl)和對象操作語言( oml ),其中對象操作語言又包括一個重要子集—對象查詢語言(oql) t3)。oodb語言一般應該具備下列功能。
2. 1類的定義與操作
包括定義、生成、存取、修改和撤銷類。其中類的定義包括定義類的屬性,操作特征、繼承性與約束等。
2. 2操作/方法的定義
面向對象數據庫語言可以用來定義操作/方法,在操作實現中,語言的命令可用于操作對象局部數據結構。
2. 3對象的查詢
oodb語言可以用于操作(包括生成、存取、修改與刪除)實例對象。對于對象的存取—查詢部分,oodb語言可以直接查詢對象個公有成員而不必向每一個對象“—單”發送消息。而對于非公有成員,則只能通過發送消息來實現存取、修改與刪除了。通過發送消息的查詢效率可能會很低,因此對于一些經常要查詢的數據應該盡量定義為公有類型。
3面向對象數據庫模式
3. 1模式的一致性
(1)唯一性約束:即同一模式中所有類的名字必須唯一、類中屬性名和方法名必須唯一。
(2)存在性約束:每個被引用的類必須在模式中定義、某操作代碼中調用的操作不需給出說明、每一個說明的操作必須存在一個現實程序。
(3)子類型約束:子類和父類(或超類)不能有環、不能有多繼承(向java學習)、單一超類必須加以說明。
3. 2模式演進操作
主要包括以下幾個部分:
(功類集的改變
(2)已有類的成分的改變
對象數據庫范文2
關鍵詞:面向對象;數據庫開發;編程;計算機應用;信息系統
引言
當前關于數據庫的應用系統,最主要的就是兩層的結構,把關系數據庫既作為存儲機制,又作為管理工具。這樣的系統最主要的設計就是數據庫的設計,可以說實體及關聯的設計與修改就是整個應用系統的開發過程。但是如果客戶變動需求或者設計人員根本就沒有搞清楚最主要的需求是什么,那么設計的程序將是難于使用的,一個微小的變動卻使得設計者不得不大量的改變原碼或推翻重做。關系數據庫無法適應頻繁變動的需求。這里應用新的方法去模擬難以捉摸的現實需求。
1 關系數據庫的優勢
當前用于存儲數據的持久機制主要有文件系統、數據庫系統(按數據模型分為層次型、關系型、網狀型)??梢圆捎梦募螂娮颖砀翊鎯祿?,但運行業務時具有很大的局限性。對于非專業人士,嘗試維護和管理分散的企業中的信息孤島會遇到數據訪問和準確性問題。性能(尤其是在客戶需求的高峰時段)可能會降低至暫停狀態。
關系數據庫在這些方面強大得多,尤其在分析方面。關系數據庫使能夠以復雜、有意義的方式操作數據,從而可以檢索到與特定條件相匹配的所有記錄,交叉引用不同的表以及批量更新記錄。在以下情況下,關系數據庫是最好的選擇:要輸入(并經常更改)分散在業務中不同計算機上的多個電子表格或其他文件中的信息;數據(以及訪問數據的用戶數量)不斷增加或更加難以使用、管理、保護,還會遇到性能問題;基于數據生成特定或常規報表以進行決策制定,但無法始終確保數據的準確、完整性。
2 數據庫開發的對象思想
面向對象的理念是自發的,源自天然的。所以面向對象技術被設計得最遵循思維的自然方式。也就是說,用到的符號,術語,定義和每個人都相關?;诿嫦驅ο蟮姆治龊驮O計技術的這些特點,客戶可以從始至終參與到系統的分析中去,參與到系統的設計。由于在討論對象之間的交互作用時,大家使用同樣的術語概念??蛻暨€可以參與文檔的創建和編寫,因為他明確已有對象的含義。這樣分析出來的設計絕對是符合需求易于客戶使用及管理的。
另外加上面向對象技術方面的繼承等技術,使得應用系統的的升級變的輕松。當今計算機硬件的飛速發展使得由于使用面向對象技術帶來的速度效率問題變得越來越沒那么重要了,而各個行業對于計算機的使用使得軟件越來越復雜,清晰的分析和設計條理變成了更主要的問題,而面向對象是非常適合解決這個問題的。
3 應用面向對象的數據庫開發
(1)系統分層 在數據庫和客戶端加入一個中間層,在這一層添加業務層和數據訪問層,數據訪問層與數據庫交互為業務層提供數據服務。業務層為客戶層提供經過分析及過濾篩選之后的對象及對象集合。
(2)面向對象分析和設計 分析需求中可能存在的潛在對象:對象是一個真實或抽象的元素項,它包含信息(即對象的屬性)和處理對象的方法。任何對象都可包含其他對象,這些對象又可包含其他對象,直到系統中最基本的對象被揭示出來。仔細閱讀需求說明書并在所有名詞下畫線,尋找于系統中的其他對象交互的實物,人員,地點、文件。尋找對象的屬性及對象之間的關系:通過需求找出潛在的對象之后就是分析對象的關系及某個對象(類)應該具有的屬性,面向對象的分析與設計的本質是我們用自然的觀點去看待一個應用系統的實現。
(3)行數據庫設計 要用面向對象思想進行數據庫設計,因此應該選擇實體主導型設計方法:設計應用系統結構;選擇便于將應用程序與 DBMS 結合的DBMS體系結構,如RDBMS;根據應用程序使用的環境平臺,選擇適宜的DBMS(如Oracle)和開發工具(如PB)設計數據庫,編寫定義數據庫模式的SQL程序;編寫確保數據正確錄入數據庫的用戶接口應用程序;錄入數據庫數據;運行各種與數據庫相關的應用程序,以確認和修正數據庫的內容。
用數據庫作為應用系統中對象的持久機制,而對象之間的關系也就是相對于數據庫設計部分的實體之間的關系,應該由應用系統的對象協調處理。就是把需求邏輯留在業務層去處理。
4 應用實例
4.1系統構想
設想這個是校園學生信息MIS系統。該MIS系統有幾種驗證方法,一、通過使用的和選擇的學校。如果其在其學習的IP段的話,就認為是在宿舍上網,可認為是學生,將自動通過注冊請求,系統發激活郵件;二、不符合第一種情況的話,看選擇的注冊方式如果是使用IP電話的話去根據選擇的學??刺顚懙腎P電話是否符合所在學校的IP段,如果符合的話,系統發激活郵件;三、選擇學校郵箱注冊,根據選擇的學校和他填寫的郵箱,如果域名符合就認為注冊人為合法學生,系統發激活郵件;四、選擇其他方式,通過人工方法去確認注冊者的合法性。
以上是用戶注冊的過程,注冊成功后,用戶通過激活賬戶的鏈接,激活自己的賬戶,然后登陸,登陸成功后就可以使用注冊用戶可以使用的所有功能。管理員除可以擁有所有注冊用戶可以使用的功能外,還可添加學校宿舍及課程信息;編輯學校所在的IP段,查看所有用戶的狀態,進行活動管理,即添加、編輯活動,設定活動規則。
應用系統需要響應用戶的操作;另應用系統還需要給出各種各樣的排行;需要按照規則確定活動的獲獎者等;需要記錄用戶的操作,以確定用戶的積分;給登陸用戶提示是否有人邀請成為朋友,是否有新的信件,是否有組織邀請加入;系統需要維護組織和組織成員之間的關系,即每個組織都有一些成員(合法用戶分創建人、管理員和普通成員),創建人可以提升普通人員為管理員。
4.2數據庫設計
這里對于設計數據庫、處理與數據庫的交互,需要從靜態類圖中設計到的對象分析出要持久化的對象,關系數據庫在這里只是一個存儲機制,不過用面向對象的思想設計的數據庫是應用系統能夠面向對象的基礎。從系統組成得知需要存儲注冊用戶的信息、博客的文章、博客和用戶間的擁有關系、相冊信息及照片信息、討論主題、帖子信息、 組織信息、學校信息等。這里就不給出數據庫設計的示例了,需要注意的是盡量應用對象之間的關系由類去處理即關聯關系留在業務邏輯層處理,數據庫專著于存儲當然某些關聯關系還是應該存儲下來的,否則業務類也無從處理。在設計業務邏輯層時,將同一類的對象抽象封裝為一個類。
用ownertype去存該comment是對什么對象進行的評論,而ownerID確定下來被評論對象的id。然后建立兩個(或者更多視需求而定)視圖,在加載評論時就可以直接從視圖blog article comments中直接選擇。當然在添加評論的操作是放在擁有他的類的方法中的。因此,就可以比較容易得到其擁有著的類型。
4.3數據庫部署
整個系統分為三層,客戶層、業務邏輯層及數據訪問層,選擇SqlServer2000作為數據庫。項目使用asp.net作為開發平臺,用c#作為開發語言,相應的使用IIS6.0作為WEB服務器。
本系統的兩種角色注冊用戶和管理員用戶的問題,在上面的類結構設計時,我讓管理員繼承的注冊用戶類,這樣管理員就自然的擁有注冊用戶可以使用的所有權限,而它本身還可以擁有自己的權限,對學校的管理,對宿舍、專業及注冊用戶的管理。在頁面類設計時采用這樣的設計來確保使用頁面的權限問題。設計三個類BasePage、BasePageForLogin、BasePageForAdmin,這三個類都繼承自System.Web.UI.Page重載了Render方法,這樣就可以為同一級別的頁面(是指只能被某一級別用戶瀏覽的一系列頁面)繪制相同的導航條,使頁面的風格統一化;BasePage類來作為未注冊用戶可以瀏覽的頁面的基類, BasePageForLogin類作為只有注冊用戶才可以瀏覽頁面的基類,BasePageForAdmin類作為只有管理員才可以瀏覽頁面的基類。然后就可以在這些類的render方法中進行統一的權限設置及出錯管理。
對象數據庫范文3
一、XML與數據庫的數據轉換原理
XML和關系數據庫在數據應用和數據管理方面各有優勢,應是一種相輔相成、揚長避短的關系。從技術角度講,“以數據庫為存貯手段,以 XML為交換載體”的數據管理模式是一種趨勢。XML存放在關系數據庫中, XML數據以虛擬XML文檔的形式存在。本文的重點即著重講解:如何將xml數據轉化為關系數據庫數據。
為了在XML文件和數據庫之間交換數據,必須將XML文件的schema(DTD,XML Schema, RELAX NG等)映射到數據庫的schema。用于數據轉換的軟件位于這種映射的上層。該軟件可以使用XML Query語言(如XPath,XQuery,或其他專用語言)或簡單地按照映射(SELECT * FROM Table的XML對應形式)轉換數據。
對于后者,文檔的結構必須完全符合映射所要求的結構。由于通常不易做到這點,使用這種策略的產品一般要和XSLT一起使用。在數據轉換到數據庫之前,先將文件按照映射所要求的結構進行轉換,然后轉存數據。相應地,數據從數據庫中取出以后,結果文件要被轉換成應用程序所需的結構。
文件schema到數據庫schema的映射是在元素類型、屬性和文本上進行的。這時幾乎總是忽略物理結構及某些邏輯結構。這樣做是自然而然的,因為數據庫和應用程序只需關心XML文件中的數據。
這種方法的一個問題是能否保證文件的往返 -- 將文件中的數據存入數據庫后,又從數據庫中的數據重新構建文件。將一個XML文件的schema映射到數據庫的schema有兩種方法:基于表格的映射和對象-關系映射。
1、基于表格的映射 (Table-Based Mapping)
許多轉換XML到數據庫的中間軟件都采用基于表格的映射。它把XML文件看作一個(或一組)表格,也就是說,XML文件的結構必須是下面這種樣子,如果只是單一表格的話,就不再需要元素和其他元素。
根據所用軟件的不同,可以將各字段數據以子元素的形式或以屬性的形式存儲,同樣也可以指定這些元素或屬性的名字。此外,采用基于表格映射方式的軟件還可能允許在文件開始的地方包含表格或各字段的元數據,或者將其作為各表格或元素的屬性。注意這里所說的“表格”是泛指的表格。當將數據從數據庫中轉到XML文件時,“表格”可以是任何結果集,反之,“表格”可以是普通的表格或可更新的視圖。
基于表格的映射對存取關系型數據比較適用,比如在兩個關系型數據庫之間轉換數據。其明顯不足就是不適于格式不符的XML文件。
2、對象-關系映射 (Object-Relational Mapping)
所有支持XML的關系型數據庫和某些中間件都可以使用對象-關系的映射方式。它將XML文件中的數據視為特定的對象樹的模型。在這個模型中,元素及其類型、元素內容或混合內容(復合元素類型)通常被視為類。只具有PCDATA內容的元素(簡單元素類型)、屬性以及PCDATA都被當作簡單屬性。然后通過傳統的對象-關系映射技術或 SQL 3的對象視圖將該模型映射到關系型數據庫。也就是說,類被映射到表格,簡單屬性被映射到字段,而值為對象屬性被映射為成對的主鍵/外鍵(primary key/foreign key)。
在理解這種映射所用的對象模型的時候要知道,這個對象模型不是文件對象模型(DOM)。所有XML文件的DOM都是一樣的,而上述描述文件數據的模型對于每個DTD所定義的XML文件都不一樣,例如,上述銷售訂單的模型是一個由四個類所組成的對象樹--SalesOrder, Customer, Item, 和Part, 如下圖所示:
模型中的對象是否被實例化要取決于所用的軟件。有些軟件允許依據模型產生類,然后可以在程序中使用由這些類所產生的對象。在這些產品中,數據是在XML文件 - 對象 -數據庫之間傳遞的。其他產品是直接在XML文件和數據庫之間進行數據轉換的,對象只是作為這種過程的可視化幫助工具。生成這些中間對象是否有用完全取決于你的應用程序。
二、將XML數據轉化為ORACLE數據庫數據
為了解決把 XML 有效地、自動地轉換出入關系數據庫的問題有各種方式。數據庫廠商Oracle已經開發了轉換 XML 到數據庫表中的輔助工具。Oracle XML SQL Utility 把 XML 文檔元素建模為一組嵌套的表。通過使用 Oracle 對象數據類型建模套入的元素。"SQL-to-XML"轉換使用被對象數據類型引用的表,和嵌套的元素之間的一到一關聯來構造 XML 文檔。"XML-to-SQL"可能要求數據模型的改進(從關系轉換到對象-關系)或重新構造最初的 XML 文檔。
使用 OracleXMLSave 來存儲XML 文檔到對象關系模型中;insertXML 方法進行實際的數據插入。
import java.sql.*;
import oracle.xml.sql.dml.OracleXMLSave;
public class testXMLInsert
{
public static void main(String args[])
throws SQLException
{ Connection conn = getConnection("yly", "yly");
OracleXMLSave sav = new OracleXMLSave(conn, "yly. FXTRADE");
// Assume that the user passes in this document as 0-arg
sav.insertXML(args[0]);
sav.close();
}
...
}
如果 XML 和在數據庫中的對象-關系模型是同步的則一切正常,但是如果不同呢? 在這種情況下你有兩種選擇。
對象數據庫范文4
關鍵詞: 面向對象數據庫;db4o;開源;程序設計
中圖法分類號: TP311.132.4文獻標識碼: B 文章編號:1009-3044(2007)15-30604-02
The Open Source OODB:db4o
CHEN Shuai, LIU Wen-ju
(Tianjin polytechnic university , Tianjin 300160, China)
Abstract:Describes the advantages and characteristic of db4o which is an kind of open source OODB. The article Show that how to operate the db4o on programming by using c# langue. The article also Explain how to load, update, delete one object of database and three very importent way of query of the db4o.
Key words:OODB;db4o;open source;programming
1 引言
面向對象是一種認識方法學,也是一種新的程序設計方法學。把面向對象的方法和數據庫技術結合起來可以使數據庫系統的分析、設計最大程度地與人們對客觀世界的認識相一致。面向對象數據庫系統是為了滿足新的數據庫應用需要而產生的新一代數據庫系統。
這里要介紹的db4o數據庫就是一種Java , .NET及Mono原生的性能卓越的純面向對象的開源的數據庫引擎,由來自加州硅谷的開源面向對象數據庫公司 db4objects開發研制。對于Java 與 .NET 開發者來說都是一個簡單易用的對象持久化工具,使用簡單,你只需要在你的項目中加入db4o.dll的引用即可。目前一些世界級的領導廠商如 Inter,IBM,Bosch,BMW,Seagate,Hertz等都是它的客戶。
b4o 的目標是提供一個適合嵌入的功能強大的數據庫引擎,用以工作在移動設備,桌面以及服務器等各種平臺。其主要特性如下:
開源模式:與其他 ODBMS 不同,db4o 為開源軟件。
原生數據庫:db4o 是 100% 的原生的面向對象數據庫,直接使用編程語言來操作數據庫。程序員無需進行 OR 映射來存儲對象,大大節省了程序員在存儲數據的開發時間。
高性能: db4o安裝簡單占空間小,僅需要400Kb左右。在db4o官方公布的基準測試數據中,db4o比采用Hibernate/MySQL方案在某些測試線路上速度高出44倍之多。
零管理:使用db4o無需DBA。
db4o支持Java和.Net平臺。
2 設計類實例
在對db4o數據庫的特點和特性有了大致了解后,我們通過一個例子來介紹db4o數據庫在程序設計中的使用。 事例語言為C#語言,這個例子展示如何存儲、更新、加載、刪除一個只包括系統內置類型及字符串成員的簡單對象實例,這個對象是一個存儲了學生(Student)的相關信息如姓名及本學期所取得學分的類。
public class Student
{ private string _name;
private int _points;
public Student(string name, int point)
{ _name = name;
_points = points; }
public string name
{ get{ return _name;}
set{ _name = value;} }
public int points
{ get{ return _ points;}
set{ _ points = value;} }
public void AddPoints(int points)
{ points += points; }
override public string ToString()
{ return string.Format("{0}/{1}", _name, _points); } }
3 打開關閉數據庫
使用Db4o.OpenFile()函數打開或新建一個db4o數據庫,Db4o.OpenFile()需要一個參數作為特定路徑的文件名,以此來獲得特定的ObjectContainer實例――ObjectContainer對外就是一個數據庫,也是我們操作db4o的主要接口。關閉ObjectContainer使用Close()函數,它將會關閉數據庫文件并釋放其占用的系統資源。
ObjectContainer db=Db4o.OpenFile(FilePathName);
try
{// You can do something here}
finally
{ db.Close(); }
此處db作為下文引用和存儲數據庫文件的變量名,其打開和關閉數據庫的操作后面將不再寫出。
4 保存對象
當我們想保存一個對象時,我們只需要簡單的調用db4o的Set()方法,并傳入要保存的對象作為參數即可。比如向db4o數據庫存入一個姓名為“Liming”,學分是86的學生對象。代碼如下:
Student stu = new Student("Liming", 86);
db.Set(stu);
Console.WriteLine("Student {0}", stu.Tostring());
5 加載對象
db4o提供了三種不同的查詢數據的方法,(1)QBE:通過實例查詢;(2)NQ:db4o原生/本地化查詢;(3)SODA:一種通過數據庫持久層進行的查詢,查詢語句被定義在字符串中,并通過持久引擎進行解釋執行。其中NQ 是db4o 推薦使用的查詢方式。這是因為NQ 方式提供了非常強大的查詢功能,支持原生語言,也就意味著你可以使用 Java, .net 來判斷該對象是否符合條件,這是其他數據庫查詢語言無法比擬的。在某些情況下, db4o 核心會將 NQ 翻譯成 SODA 以獲得更高的性能。
這下面分別詳細介紹一下這三種查詢語言。
5.1 QBE查詢
當使用QBE進行查詢時,我們需要為希望加載的數據而創建一個對象原型(prototypical ),db4o將會加載所有與原型相同類型(各成員字段不為默認值)的對象,返回的結果將會存儲在ObjectSet對象實例中。
這如果想要從數據庫中加載所有的學生對象,我們要提供了一個初始值為空的Student原型對象。原型對象中車手的積分為0,這是因為對于int型字段的默認值為0。
Student stu = new Student (null, 0);
ObjectSet result = db.Get(stu);
foreach (object item in result)
{ Console.WriteLine("Student {0}", stu.Tostring()); }
如果我們想要從數據庫中加載特定的學生對象,只需要相應提供給數據庫你所需要的信息即可。比如想得到姓名為“Liming”,學分值是80的學生對象:
Student stu = new Student ("Liming", 80);
ObjectSet result = db.Get(stu);
foreach (object item in result)
{ Console.WriteLine("Student {0}", stu.Tostring()); }
通過上面的例子我們不難看出,使用QBE方式進行查詢存在著如下幾個局限點:
1)db4o需要反射你提供模板對象的所有成員數據;
2)不能使用高級查詢表達式,如AND、OR、NOT等;
3)對于數據不能使用強制條件,如int的0,string的空字串或空引用類型,因為它們在查詢時都解釋為非強制關系;
需要為類提供非初始化成員數據的構造函數,這意味著在定義數據成員時不能對其進行初始化。
所以,我們推薦的是另一種查詢方式 NQ。
5.2 NQ查詢
使用NQ為你的查詢提供了開發語言內置的支持能力,提供類型安全機制、編譯時檢查及反射功能,使用面向對象的方法調用來完成查詢。NQ是db4o數據庫查詢的主要接口也是開發者極力推薦的數據查詢方式,因為NQ充分運用了開發語言的語義完整性,將會成為將來完美而安全的選擇。
這也有人說使用NQ查詢就是用你熟悉的編程語言進行數據庫查詢。所以這樣寫出的查詢代碼將是 100% 的類型安全、100% 的編譯時檢查以及 100% 的可重構。
下面我們看看在C#語言中NQ是如何進行使用的。
C# .NET 2.0
Ilist stu = db.Query (delegate(Student stu){
return Stu.points = 80;});
C# .NET 1.1
IList list = db.query(new StudentPoints ());
public class StudentPoints: Predicate {
{ public boolean match(Student stu)
{ return stu.Points = 80;} };
for(int x = 0; x < list.size(); x++)
{ Console.Writeline(list.get(x)); }
從上述代碼中可以看出,對于不支持泛型的語言來說,都需要提供一個擴展com.db4o.Predicate的類,并提供一個參數為待查詢的類,并返回布爾值的函數#.Match()或#.match(),其函數簽名為:
bool Match(Pilot candidate);
可以看到,在進行 NQ 查詢時并沒有加入任何條件(無條件返回 true),那么這么做是不是相當于遍歷了整個數據庫?db4o 的設計者早就想到了這個問題,當 db.query() 執行完畢返回 list 實例的時候,db4o 只是與數據庫同步取出內部的 IDs 而已,并沒有把所有的 Student對象全部取出,只有在list.get(x) 之后才會去根據 IDs 取出記錄。所以我們不必擔心性能方面的問題。
5.3 SODA查詢
SODA是db4o提供的底層查詢接口,允許開發人員直接操作查詢表達式樹中的節點,它采用字符串標識對象數據成員,但是這種方式既不是類型安全也不在編譯時進行檢查并且寫起來十分冗長。
比如我們想查找成績在80到90分之間,或者姓名為“Liming”的對象。用NQ查詢代碼如下:
IList result = db.Query< Student > (delegate(Student stu) {
return stu.Points > 80
&& stu.Points < 90
|| stu.Name == "Liming"; });
而用SODA寫起來則較麻煩一些:
Query query=db.Query();
query.Constrain(typeof(Student));
Query pointQuery=query.Descend("_points");
query.Descend("_name").Constrain("Liming")
.Or(pointQuery.Constrain(80).Greater()
.And(pointQuery.Constrain(90).Smaller()));
ObjectSet result=query.Execute();
而SODA也有其它兩種查詢不可比擬的優勢,那就是使你的應用程序能夠動態生成查詢,這種情況也是我們在應用開發中所需要的。
看一看由QBE查詢轉換為SODA的例子,想得到所有車手的對象信息,對于查詢的約束為Student類對象。
Query query = db.Query();
query.Constrain(typeof(Student));
ObjectSet result = query.Execute();
ListResult(result);
為了通過學生姓名字進行查詢,我們需要擴展上述約束條使其包含待查詢對象的” name”字段的相應字符串。
Query query = db.Query();
query.Constrain(typeof(Student));
query.Descend("_name").Constrain("Liming");
ObjectSet result = query.Execute();
ListResult(result);
現在對db4o數據庫的查詢工作做一個總結。我們可以通過其提供的三種方式中的任意一種來完成。對于何時采用哪種方式進行查詢,我們的建議是:
(1)NQ作為db4o主要的查詢接口將是我們不二的首選;
(2)當前版本中對NQ查詢的優化操作總是以SODA方式來執行的,因此SODA可以作為系統優化的一種途徑,同時它總是用來在運行時動態的生成查詢。
(3)QBE對于初學者來說將是很好的選擇,當然它在功能上會有些限制,如果你喜歡的話有時對的應用還是很適合的。
6 更新對象
更新對象跟存儲它們一樣簡單,實際上我們只需要把更改后的對象在存入數據庫中就可以了。即再次調用同樣的方法Set()方法就可以了。
ObjectSet result = db.Get(new Student("Liming", 0));
Student stu= (Student)result.Next();
stu.AddPoints(11);
db.Set(found);
Console.WriteLine("Added 11 points for {0}", stu.ToString());
請注意,在調用Set()方法更新對象之前我們先進行了查詢,這一點十分重要。這是因為如果在當前的存儲或加載操作過程所處的會話中對象對于db4o不可知的話,db4o將會向數據庫中插入一個新的對象,之所以會這樣是因為db4o不會自動的去匹配先前存儲于數據庫的對象,而是假設你向數據庫中存入第二個擁有相同屬性的對象。
7 刪除對象
刪除數據庫中的對象使用的方法是Delete()方法。
ObjectSet result = db.Get(new Student("Liming", 0));
Student stu= (Student)result.Next();
db. Delete (stu);
8 結語
Db4o面向對象數據庫與傳統數據模型相比較,優勢體現在:一是Db4o對數據語義的擴展更大,通過允許定義任何復雜的數據類型和提供與數據相關聯的行為。這種語義更接近于面向對象程序設計語言的語義。二是面向對象技術強調與數據相關的軟件的組織而不是強調控制流,從而把程序員的注意力轉向數據庫設計者的意圖,面向對象語言和面向對象數據庫相互形成互補,并且又保持了各自的長處。三是Db4o在功能方面與關系數據庫有很大的區別。關系數據庫,如SQL Sever在運行時根據存在表中的數據集而導出一個虛結構。Db4o數據庫本身含有對象。四是Db4o是一種主動型數據庫,而一個關系數據庫則是被動型的數據庫。關系數據庫主要提供的是增刪記錄的能力,而面向對象數據庫提供了在對象中嵌入方法的能力。因而,Db4o數據庫可以嵌入很多的操作,而在關系數據庫中,這些操作需要應用程序來實現。五是Db4o新引入的抽象、擴充類型定義、用戶自定義操作以及支持版本規模型演化等概念和功能,消除了傳統數據庫對數據定義的一致性,提供了更為豐富的語義。
參考文獻:
[1]Object-oriented database programming with db4o[EB/OL]. /30878/ShowPost.aspx
[2]DB4O 國內翻譯的部分資料―― Forums [EB/OL]./PrintThread.aspx?PostID=30860
對象數據庫范文5
關鍵詞:MQ;民航;氣象數據庫
引言:
隨著交通事業的全面發展,人們對氣象資料信息及氣象速度要求日益增長,伴隨科學技術水平的提高,MQ在民航氣象數據庫系統中扮演越來越重要的角色,大幅度提高了氣象信息對民航的安全保障能力,提高了航空氣象業務的服務效率。筆者通過對MQ的系統闡述,探究MQ在航空氣象數據庫系統中的應用策略,旨在為民航事業貢獻力量。
一、MQ概述
(一)消息。消息是對使用它的程序中產生影響的字節組合。消息的主要用途是從一個應用程序傳遞數據到另一個應用程序。消息主要由應用程序數據和消息描述符量部分組成。應用程序能夠決定應用程序數據的內容和結構。
(二)隊列。MQ隊列可以根據不同的功能分類成不同的隊列,主要分為本地隊列和遠程隊列。本地隊列繼續細化可分為普通本地隊列和傳輸隊列,普通本地隊列是應用程序通過固定接口對其進行操作的隊列;傳輸隊列將遠程隊列信息資源作為臨時存儲目標。
(三)隊列管理器。隊列管理器能夠為多種應用程序提供管理服務,使若干應用程序根據一定的順序進行排隊,同時根據應用程序的不同需求對適應其要求的隊列進行有效管理。隊列管理器能夠有效保證JyhLinux聯搜集到的信息資源更改對象屬性。隊列管理器能夠將JyhLinux聯遇到的緊急情況按照應用程序的需求放入正確的隊列當中,如果此類特殊事件不能放入正確的隊列當中予以解決,會及時將未能解決的代碼通知所屬應用程序[1]。
(四)通道。隊列管理器的有效通信路徑是成為通道。通道主要由以下三類組成:消息通道、MQI通道、群集通道。JyhLinux聯通道的主要功能是為處于相同平臺或者不同平臺上的不同隊列管理器提供通信路徑。消息通道的主要功能是為兩個隊列管理之間傳遞信息提供途徑,為應用程序提供快捷的環境。
二、MQ在民航氣象數據庫系統中的應用
MQ在民航氣象數據庫系統中扮演者重要角色,其具有傳輸氣象信息和圖形產品的義務。以下以成都和貴陽兩個民航節點為例,闡述MQ在民航氣象數據庫系統中的應用原理[2]。假設在成都的本地通信系統中,存在兩個應用程序,分別是應用程序A和應用程序B且A和B處于本地同一系統內,那么A和B之間可以以消息隊列為媒介進行信息的傳遞;也就是當應用程序A向消息隊列了一條重要信息,當B需要利用這條信息時,可以在消息隊列中查收到信息。假設成都到貴陽的通信系統中,成都擁有應用程序A和B,貴陽的應用程序為C,當應用程序向隊列中發送一條消息,消息的目標是位于貴陽通信系統上的應用程序C,當成都通信系統中的MQ發現A發送的信息實際在貴陽通信系統上,MQ會將信息自動納入新的隊列中進行區分,而新的隊列是傳輸隊列。假設現在我們已經創建了成都-貴陽信息通道,信息通道服務器將在通道中讀取傳輸隊列的消息,然后將這條消息迅速傳遞到貴陽的數據庫系統中等待貴陽方面的確認。成都信息系統的MQ確認貴陽通信系統已經成功接受并確認了該條信息之后會將傳輸隊列中的信息自動刪除。如果由于通信線路出現故障或者貴陽系統不在正常運行狀態造成的信息沒有及時傳送和確認,信息將自動保存在傳輸隊列中,直到信息被成功傳送到目的地為止。確保信息的有效傳遞是MQ最基本和最重要的技術。在實現信息傳遞的過程中,作為信息發送方的成都通信系統需要完成建立隊列管理器-定義傳輸隊列-創建遠程隊列-定義發送通道程序。作為信息接受和確認方的貴陽通信系統西藥完成建立隊列管理器-定義本地隊列-創建接受通道的程序。
結語:
快速、及時、有效地進行氣象信息傳遞與是現代交通事業發展的需要,是民航事業提高運輸水平的需要,是保障飛行安全的需要。MQ在民航氣象數據系統中的全方位應用能夠為氣象信息在復雜化的網絡環境和系統環境中有效提供技術層面的保障,MQ重要潛能正在被民航管理者和技術研究部門開發和利用,希望通過本文的相關分析能夠為民航事業的決策者和領導者提供在氣象數據庫系統領域的借鑒,是MQ在民航氣象數據庫系統中綻放異彩,保障飛行安全,促進民航事業持續穩定發展。
參考文獻
[1]姚麗萍,黎巍.民航數據庫系統中MQ技術的應用[J].中國電子商務,2014,08(04):59-60.
對象數據庫范文6
隨著信息技術與科技設備的發展,網站得以出現。而隨著信息科技的普及,網站也得到普及。網站在開發中涉及前臺頁面制作以及后臺程序管理制作,而后臺程序是一種基于服務器的可執行程序,可以經由服務器端執行或數據庫連接進行數據交換與修改。顯然,數據庫技術在網站開發中占有重要地位。數據庫設計的質量可以反映程序員的設計水平,也能夠直接影響網站的運行效率。一個優秀的數據庫設計,能夠充分提升網站數據傳輸效率,保證數據信息的一致,所以數據庫設計優化才可以保障網站的運行質量。本文通過分析數據庫概念、網站開發的特點、數據庫在網站中的應用、有無數據庫支持的網站開發對比等,進行數據庫設計在網站開發中應用的論述。
關鍵詞:
網站開發;數據庫技術;互聯網;應用
互聯網出現十幾年,用非常快速的速度影響著人們的生活,改變人們的生活方式、工作方式、生產效率等。順應互聯網技術的發展與社會各階層的需求,網站被開發出來,政府機關與企業間等各種機構都開設獨立網站。網站的作用可以是為企業宣傳,可以是產品營銷,可以是知識傳遞等,以滿足人們的多種需求。因此,網站的開發產業得到了有效發展。本文論述數據庫設計對網站開發的作用。數據庫是網站開發的核心,網站內所有的數據都需要數據庫進行處理,所以數據庫的設計是決定網站運行質量的關鍵因素。因此,本文以數據庫的設計為核心,展開數據庫在網站開發中應用的研究,從而論述數據庫設計對網站開發的實際價值。
1數據庫技術概述
數據庫在領域內被稱為數據的倉庫,是依據數據的傳輸形式與自身結構進行存儲與管理的倉庫。后期隨著數據庫技術的不斷發展,數據庫的職能逐漸擴展,已經不僅用于管理信息與儲存信息,而且發展成為用戶所需的數據管理方式?,F展下的數據庫可以為用戶保存數據,還可以關聯到與之相關的數據。程序開發者按照不同用戶的需求進行數據庫設計,并負責數據庫的運行、維護、安全保護,確保數據庫的有效運行[1]?,F階段,數據庫設計技術已經成熟,可對大型數據進行安全管理。所以,現代數據庫設計也被應到各個領域中,如網絡購物、銀行系統、網站等。
2數據庫的具體設計
2.1數據庫設計的原則程序員在進行數據庫設計時,要充分考慮可能影響數據庫設計的多方面因素,因此,需要程序員具有整體意識,以用戶的需求為設計基礎,避免出現過多不需要的數據庫空間,浪費資源,同時節省人力、時間與財力。數據庫設計要被限定在特定范圍內,對用戶所需存儲的數據進行管理。在數據庫開發前,需要設計者做好充足準備,全面了解數據庫的網站以及對網站后期可能開發的需求。設計數據庫時,要預留可再開發的空間,使數據庫更具有可擴展性[2]。數據表是數據庫的核心體現,因此數據表的命名要清晰,方面用戶數據的查找與提取。同時,要對用戶進行權限配置,限定特定的用戶可以進行數據庫訪問,以加強數據庫的訪問安全。
2.2數據表字段的類型數據表的字段需要根據用戶所需求的字段最小數據類型進行確認。例如,性別數據庫。只有男女兩個分類,可以設置為int型,數字0代表男性,數字1代表女性。但是,如此設計會造成資源浪費。于是,可以按最優設計為基準,將字段設置為bit型,true為女性,false為男性?,F代信息技術的發展,使得硬盤的容量逐漸提升,市場價格也逐漸下降。但是,如果數據庫設計的不夠合理,隨著數據資源的集聚增加,占用的硬盤空間會逐漸加大,進而影響數據庫的運行效率,增加用戶數據瀏覽時所用的時間。
2.3數據表的設計數據表是數據庫對用戶的體現途徑。按照用戶的不同需求,數據庫的設計也有所區別,而數據庫的設計與網站的規模密切聯系[3]。數據庫的設計需要滿足用戶網站的多樣性與擴展性需求,網站的設計會區分為不同的功能模塊。因此,在進行數據表創建時,要最大化將數據資源存儲到數據庫的不同表中,同時建立數據字典。實例說明:某新聞網站,數據庫包含以下幾個方面:(1)系統數據表,用于用戶基本信息的存儲,如聯系方式等;(2)菜單表,作為網站首頁菜單信息的存儲;(3)欄目表,作為網站信息各欄目名稱的存儲;(4)新聞信息表,作為網站內各項新聞內容的存儲,如新聞標題、時間、信息來源等;(5)用戶表,作為網站各類用戶與權限信息的存儲。以上所介紹的是簡單的新聞網站的基本表設計,如果網站內部還有其他功能,可以繼續創建新表,不受限制。
3數據庫設計在網站開發中的實現
3.1網站前臺的設計實現網站前臺的作用是將存儲在數據庫中的信息轉換為用戶可以通過瀏覽器進行瀏覽的網頁。一個常用網站可以供用戶瀏覽的信息包括三個類型:網站首頁信息、網站新聞欄目首頁信息、網站新聞頁面信息。此三個類別中的信息均來自數據庫,其中網站首頁所顯示的是不同新聞欄目中最近的幾條信息標題,信息條數可以自行設計;網站新聞欄目首頁所顯示的是網站內部指定欄目的信息標題;網站新聞頁面顯示的是用戶制定的新聞內容的詳細內容。所以,網站前臺的主要功能是能夠自動生成網頁文件,這需要數據庫的輔助,各欄目內容需要隨時進行信息的錄入、儲存、提取。數據庫設計中,需要將各類信息做好數據表的分類,方便信息管理,最大化使用數據庫空間[4]。
3.2網站管理后臺的設計實現網站的后臺管理歸管理員個人使用,主要負責網站內部各欄目與內容的管理,涵蓋欄目的添加與替換、內容的更新與替換、頁面的修改與維護等。后臺管理的結構包括權限管理、欄目管理、信息管理、模板管理、插件管理等多個板塊。其中,權限管理用于設置網站的訪問權限,如頁面是否允許復制、管理員設置等;欄目管理可以進行欄目名稱的調整,如名稱替換、位置替換等;信息管理主要用于前臺新聞內容的更新,可以做新聞的添加,也可以進行刪除與修改等;插件管理是網站結構的管理,如首頁管理、權限管理等可以將其他版塊添加到插件管理中。網站管理后臺涉及眾多模板,需要數據庫設計進行網站結構的優化。
4數據庫在網站中應用的結果分析
4.1網站建立期的分析網站在建設期間有多條新聞需求,在建設期如果沒有數據庫的支持,則需要創建多個靜態新聞頁面。欄目首頁需要4個,網站首頁需要1個,再加上個頁面的內部頁面,數量居多,且如此開發出的網站不可進行重復使用,需要擴展或者更新時,則需要全部重新建立。而具有數據庫設計的網站在建設期間首先通過編程建立網站前臺與網站的內容管理后臺,設計時需要投入較多,但是設計后網站可以進行重復利用。網站管理后臺可以長久使用,可以直接進行網站的改版,從而減少資源浪費與時間成本。
4.2網站運行期間的分析網站運行維護期間,可分為兩種情況:網站內部不需要內容的更新;網站內部需要做大量內容更新。第一種情況中,采取數據庫設計與不采取數據庫設計,后期將付出的投入沒有太大差別,所以更需要考慮網站內部需要大量內容更新的情況。這主要源于現代信息社會信息量巨大,無論是處于網站優化還是企業宣傳,現代企業所建立的網站都需要進行大量信息的上傳與修改。沒有數據庫支持的網站建設,每進行一條新聞的添加,都需要增加一個新聞頁面,同時還需要修改所屬欄目的首頁,所以一次新聞的更新需要改動三個位置,如進行大量內容的添加,導致工作量劇增。而有數據庫支持的網站,增加新聞時不需要做任何頁面的添加與修改,只需在后臺添加已經設置好的新聞管理頁面,操作簡單。具體地,將需要添加的新聞標題與內容分別添加到各自的文本框,然后提交即可??梢?,工作量極小。
4.3結果分析現代社會處于一個信息爆炸的年代,海量信息在互聯網內部傳播,用戶需要網站內部具有新聞排序、檢索、分頁等功能,而這些功能的實現,必須通過數據庫才可以完成。通過上述對有無數據庫網站之間的比較可以發現,靜態頁面組成的網站使用與較小型的使用,內容無需更改;而具備數據庫設計的網站開發方式則適用范圍更廣,可以支持大型網站建設,內容更新快捷,反應靈活,使用于大量制作網站的網絡公司使用,可重復利用性更高。
5結語
通過上文敘述可知,單純的網站開發需要多個靜態頁面進行連接,實用性較小,進行數據更新時操作工作量過大,且網站一旦建立不可重復使用,不利于資源重復利用。而經過數據庫的設計可以做到網站結構的優化。網站設計前,預先建立網站前臺與網站內容管理的后臺,通過用戶的需求將所需要的欄目信息存儲在數據庫中,在網站首頁進行頁面瀏覽時可以快捷從數據庫進行提取,而網站內容更新也可以在后臺進行簡單操作,網站建立后可以進行重復利用,隨時進行網站改版,以可以看出網站有無數據庫設計的巨大差別。網站開發的方向是實際應用,數據庫的設計原則是優化,因此數據庫設計在網站開發中可以起到極大的優化作用。
參考文獻
[1]徐偉明.ASP在網站開發中數據庫連接方法及比較[J].電腦知識與技術,2010(30):8448-8450.
[2]朱國進,夏虹.ADO在網站數據庫開發中的應用[J].山東電力高等??茖W校學報,2002(2):67-71.
[3]王玉蓉,王文娟.NET與數據庫技術在動態網站開發中的研究與應用[J].數字技術與應用,2014(3):106.