前言:中文期刊网精心挑选了对象数据库范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
对象数据库范文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 数据库开发的对象思想
面向对象的理念是自发的,源自天然的。所以面向对象技术被设计得最遵循思维的自然方式。也就是说,用到的符号,术语,定义和每个人都相关。基于面向对象的分析和设计技术的这些特点,客户可以从始至终参与到系统的分析中去,参与到系统的设计。由于在讨论对象之间的交互作用时,大家使用同样的术语概念。客户还可以参与文档的创建和编写,因为他明确已有对象的含义。这样分析出来的设计绝对是符合需求易于客户使用及管理的。
另外加上面向对象技术方面的继承等技术,使得应用系统的的升级变的轻松。当今计算机硬件的飞速发展使得由于使用面向对象技术带来的速度效率问题变得越来越没那么重要了,而各个行业对于计算机的使用使得软件越来越复杂,清晰的分析和设计条理变成了更主要的问题,而面向对象是非常适合解决这个问题的。
3 应用面向对象的数据库开发
(1)系统分层 在数据库和客户端加入一个中间层,在这一层添加业务层和数据访问层,数据访问层与数据库交互为业务层提供数据服务。业务层为客户层提供经过分析及过滤筛选之后的对象及对象集合。
(2)面向对象分析和设计 分析需求中可能存在的潜在对象:对象是一个真实或抽象的元素项,它包含信息(即对象的属性)和处理对象的方法。任何对象都可包含其他对象,这些对象又可包含其他对象,直到系统中最基本的对象被揭示出来。仔细阅读需求说明书并在所有名词下画线,寻找于系统中的其他对象交互的实物,人员,地点、文件。寻找对象的属性及对象之间的关系:通过需求找出潜在的对象之后就是分析对象的关系及某个对象(类)应该具有的属性,面向对象的分析与设计的本质是我们用自然的观点去看待一个应用系统的实现。
(3)行数据库设计 要用面向对象思想进行数据库设计,因此应该选择实体主导型设计方法:设计应用系统结构;选择便于将应用程序与 DBMS 结合的DBMS体系结构,如RDBMS;根据应用程序使用的环境平台,选择适宜的DBMS(如Oracle)和开发工具(如PB)设计数据库,编写定义数据库模式的SQL程序;编写确保数据正确录入数据库的用户接口应用程序;录入数据库数据;运行各种与数据库相关的应用程序,以确认和修正数据库的内容。
用数据库作为应用系统中对象的持久机制,而对象之间的关系也就是相对于数据库设计部分的实体之间的关系,应该由应用系统的对象协调处理。就是把需求逻辑留在业务层去处理。
4 应用实例
4.1系统构想
设想这个是校园学生信息MIS系统。该MIS系统有几种验证方法,一、通过使用的和选择的学校。如果其在其学习的IP段的话,就认为是在宿舍上网,可认为是学生,将自动通过注册请求,系统发激活邮件;二、不符合第一种情况的话,看选择的注册方式如果是使用IP电话的话去根据选择的学校看填写的IP电话是否符合所在学校的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.1学生的积极性较低
许多中职院校的学生对学习的兴趣都比较低,在学习的态度上表现的也不主动。虽然数据库学习是计算机专业的核心课程,但是因为数据库学习的运算过程和杂乱的代码大大的减弱了学生们的积极性,从而降低了学生们对数据库学习的重视。
1.2教学方式传统
许多中职院校数据库教学还是传统的教学模式为“老师教,学生听”,师生之间的互动不多。因为数据库学科定理是十分抽象难懂的知识,又因为学生没有参与计算和实践,所以数据库学科的知识很难被学生们理解。
1.3不重视教学的实践
数据库学习是一门要求很高的学科,它要求学生对软件操作和实际计算机都应具备很高的能力。这就需要教师重视培养学生的实际操作技能,让学生多多的进行实践。然而在实际的教学过程中,教师更加注重理论知识的学习,从而忽视了培养学生的实践操作能力。
2项目教学法的定义与具体实践
项目教学法是要求学生和教师在一定的教学环境下,共同完成一个比较完整的教学项目。在整个教学活动中,教师承担着主导性的作用,帮助同学们充分发挥自己的主动性和积极性,在整个教学活动后,教师还应该对学生完成项目的情况进行点评。总结来说,项目教学法有三大方面:
2.1“总-分”的线性模型
“总线”要对开发的方向、项目的选择和项目的实施提起注重。“分线”是要对模块的设计、界面的风格和数据的标准统一提起注重。
2.2项目的实施
要对项目进行定向,这就要对教材、学生的兴趣、项目难易的程度进行考虑;再确认分组;②通过小组和数据库教材内容进行知识的构建;③把数据库的理论融入到学生的实际实践中,同学们分析结果后,老师进行补充回答,这样有助于提高学生的自主学习能力。
2.3评价
项目实施成果,老师的检验评价是对学生努力的肯定,这也是同学们互相学习的过程。①可以由学生自己评价,由学生由己介绍项目的开发心里体会、成功的经验、失败的教训;②有同学之间相互评价,让同学相互之间提出对方的不同见解;③由老师对各组进行评价。通过评价既可以肯定学生的努力,又可以帮助同学们指出不足之处,挖掘同学潜力。此后,教师可以选择优秀的作品、好的设计思路进行总结和归纳,建立作品档案,为以后的教学提供优秀学习资料。考核学生的表现可以作为成绩的考核内容之一,这样可以增加学生的积极性。
3项目教学法在数据库教学中应注意的事项
3.1要体现师生角色互换
在传统的教学法中,整个教学过程是以教师为中心的。教师按照学科所学内容进行设计、安排教学顺序,教师讲什么,学生就学点什么,这样学生就变成了一个学习的木偶,始终是一个被动的角色。然而项目教学法是要突破传统的师生模式,这就要在实际的教学过程中,学生更多的参与,在这一过程中学生占主体地位,为学生提供更多的学习机会,使学生将自己学习的理论知识与实践进行结合,更简单的是学生深入理解学习的内容。
3.2要重视对实践的总结
项目教学法主要的作用是培养学生的主动性和实践能力,但是也不能忽略在教学过程中对对项目教学的实践过程进行评价和总结,从而实现实现理论与实际相结合。具体来讲,项目教学实践的总结主要包括两点:①对实践的过程中的总结,通过总结可以帮助学生在实践过程中遇到的困难和问题,并可以总结出重要的知识点。②对,整个实践过程后的总结,通过实践过程可以使学生对数据库整体的知识有一个大概的理解,既可以加深了学生对知识点的理解,又可以提高学生对学习的信心和积极性。
3.3选择适合学生的优秀项目