面向对象数据库与关系数据库的比较研究.docx
《面向对象数据库与关系数据库的比较研究.docx》由会员分享,可在线阅读,更多相关《面向对象数据库与关系数据库的比较研究.docx(8页珍藏版)》请在冰豆网上搜索。
![面向对象数据库与关系数据库的比较研究.docx](https://file1.bdocx.com/fileroot1/2023-5/27/aeffb647-afd0-4082-897e-f1eb0969074a/aeffb647-afd0-4082-897e-f1eb0969074a1.gif)
面向对象数据库与关系数据库的比较研究
面向对象数据库与关系数据库的比较研究
摘要:
关系数据库与面向对象数据库作为第4代和第5代数据库的代表,它们的发展经历了怎样的过程?
两种数据库技术之间有着什么样的联系?
从基本的概念入手,结合两种技术的外在特征,通过两种工具MySQL及db4o的使用分析,探讨它们内在的技术细节,全面地对这两种数据库进行了比较研究。
关键词:
面向对象数据库;关系数据库;db4o;MySQL
1基本概念
面向对象数据库(ObjectOrientedDataBase,下文简写OODB)技术是将面向对象方法和数据库技术相结合,使得人们在分析和设计系统时能够以对象的观点来定义、操作数据,以达到在最大的程度上与人们对于客观世界的认识相一致的目的。
关系数据库(RelationalDataBase,下文简写RDB)技术则是以数学中的集合代数为基础,将实体与实体之间的关系集合通过二维表的形式存储在数据库中,并以这些基本表为基础构建出查询、视图、报表等一些复杂的对象,以达到特定的需求的目的。
2OODB与RDB的特征探讨
OODB与RDB技术是在特定的时期出现的两种数据库技术,这两种技术各有其优缺点,我们不能单纯地作孰优孰劣判断,因为这两种技术在实际过程中得到了广泛的运用,但通过比较这两种技术的内在核心,我们可以看出它们流行的原因以及缺点和不足,这样我们在以后实际分析和设计数据库时,就可以判断应用哪种数据库技术更符合我们的要求,帮助我们化繁为简。
2.1OODB技术特征
面向对象方法学是建立在“对象”概念基础上的方法学。
“现实世界中的失误抽象到问题空间就称为对象”,而对象封装了属性(即状态)和方法(即行为)。
这样就和客观的实体有了直接的对应关系,我们认为这里的属性也就是数据,反映出对象的属性状态,而方法即对于对象的操作,反映出对象的行为动作。
也就是说在OODB技术中,对象并非静态的数据值,而是具有行为,其自身状态可以改变的数据。
这种对象可以大到一个国家,亦可小到一个整型变量。
这样我们在使用的时候就有了更大的灵活性,这使得OODB技术成为继第一代文件系统,第二代层次数据库系统,第三代CODASYL(ConferenceonDataSystemLanguages)数据库系统,第四代关系数据库系统后下一代数据库系统技术的首选。
2.2RDB技术特征
在关系数据库中,我们着重探讨的是如何应用集合代数的理论将各个实体通过二维表(逻辑结构)的形式表示出来,实体和实体之间的关系成为其单一的数据结构。
我们用集合操作中的选择、投影、连接、除、并、交、差来实现查询操作(查询的表达能力是关系操作的重点),用插入、删除、修改实现对于数据的更新。
而在识别实体和关系的过程中,用一系列的技术手段(如ER图,范式转换等)将实体不断进行细化,相应的各种关系也不断得到细化。
这样一来,就构成了一张大的网状结构,使得各种实体关系显得紧密而复杂。
正是由于RDB技术的这一特征,使得开发人员和用户在具体应用的时候要尤为小心,为了避免操作上的失误,在实际RDB系统时我们往往会加上各种约束条件,这样使得系统更为复杂。
3OODB与RDB技术细节探讨
下面从这两种技术的细节,以工具MySQL作为RDB技术的代表,以db4o数据库引擎作为OODB技术的代表,分别进行探讨分析。
3.1工具说明
MySQL是一个小型关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。
由于这四个软件都是自由或开放源码软件,因此使用这种方式不用花费任何费用就可以建立起一个稳定、免费的网站系统。
db4o是一个开源的纯面向对象数据库引擎,对于Java与.NET开发者来说都是一个简单易用的对象持久化工具,使用简单。
与MySQL一样,db4o也是一款开源软件,通过开源社区的力量驱动开发db4o产品,另一方面,db4o是100%原生的面向对象数据库,直接使用编程语言来操作数据库。
程序员无需进行对象-关系(object-relation)映射来存储对象,大大节省了程序员在存储数据的开发时间。
这就与传统的关系数据库有所不同,传统的关系数据库在设计时并未考虑编程语言在使用数据库时所遇到的一些问题,而是先设计好基本的表结构和一些在这些表结构基础上衍生出的对象,诸如查询、视图、窗体等,然后不断向数据库中存储数据,在用不同的编程语言实现图形用户接口来操作数据库时,实现对数据库的插、删、改、查询等操作。
这个过程会花费许多的时间,并且会在性能上大打折扣。
在db4o官方公布的基准测试数据中我们可以明显看到在db4o数据库引擎与其他数据库在性能上的对比(如图1),这也体现了OODB技术在应用时的一大优势。
图1db4o官方基准测试数据
3.2两种工具的使用
3.2.1MySQL的基本使用
由于MySQL是关系型数据库管理系统,因此它使用传统的表结构存储字段,然后根据表结构插入记录,使用数据库时通过访问表结构来完成数据的检索、修改、更新等功能(这里以命令行接口(CLI)的形式作说明)。
使用传统的结构化查询语言(StructuredQueryLanguage)来进行操作。
SQL又可以划分为以下3类语言:
(1)数据定义语言(DataDefinitionLanguage实现对于数据的定义)。
它是SQL语言的基础,可以认为它完成对于数据库、数据表、表中字段等一些构成数据库元素的初始化工作,例如:
ALTER[IGNORE]TABLEtbl_namealter_specification
[,alter_specification]…
用于更改原有表的结构,包括增加或删减列,创建或取消索引,更改原有列的类型,或重新命名列或表等。
(2)数据操纵语言(DataManipulationLanguage实现对于数据的操纵)。
它是SQL的核心,它主要由查询(SELECT)语句构成,如:
SELECT
[ALL|DISTINCT|DISTINCTROW][HIGH_PRIORITY][STRAIGHT_JOIN]
[SQL_SMALL_RESULT][SQL_BIG_RESULT][SQL_BUFFER_RESULT]
[SQL_CACHE|SQL_NO_CACHE][SQL_CALC_FOUND_ROWS]select_expr,...
[INTOOUTFILE'file_name'export_options|INTODUMPFILE'file_name']
[FROMtable_references
[WHEREwhere_definition]
[GROUPBY{col_name|expr|position}
[ASC|DESC],...[WITHROLLUP]]
[HAVINGwhere_definition]
[ORDERBY{col_name|expr|position}
[ASC|DESC],...]
[LIMIT{[offset,]row_count|row_countOFFSEToffset}]
[PROCEDUREprocedure_name(argument_list)]
[FORUPDATE|LOCKINSHAREMODE]]
当然还包括一些INSERT、UPDATE、DELETE、REPLACE、TRUNCATE等一些对于数据库内容进行修改的命令,此处不再赘述,可参看相关的命令格式说明。
(3)数据控制(或管理)语言(DataControlLanguage实现对于数据库的管理和控制)。
如CREATEUSER用于创建新账户,GRANT和REVOKE语句允许系统管理员创建MySQL用户账户,授予权限和撤销权限等。
通过以上3类语言,再配合一些其他的SQL语句,如一些实用工具语句,如DESCRIBE、USE等,事务处理和锁定语句,如STARTTRANSACTION,COMMIT和ROLLBACK语句,和一些用于控制主、从服务器的SQL复制语句可以实现对于数据库的访问和控制。
通过以上的说明,我们可以看到,关系数据库在使用SQL来管理数据库的时候,是以基本的二维表结构为基础,通过对二维表的细分(如利用范式转换等方法),建立表与表之间的关系,用结构化查询语言将一系列的布尔代数关系转换为人们可以理解、方便使用的SQL命令进行查询及其他的数据库操作。
3.2.2db4o的基本使用
如前述,db4o是一种数据库引擎,它使用方便,只需要在项目中添加db4o.dll的引用即可,使用db4o时需要使用到的两个主要的命名空间是com.db4o(主要有com.db4o.Db4o和comd.db4o.ObjectContainer,前一个用来实现数据库文件配置、启动或连接服务器及打开数据库文件等功能,后一个实际就代表单模式或C/S模式下的db40数据库对象)以及com.db4o.query(包含NQ查询谓词类,主要查询接口)。
即通过简单的配置,我们就可以开始使用db4o数据库了,只要数据库引擎打开,我们在项目开发时可以不断的操作这个数据库。
当然面向对象数据库中数据是是以对象的形式进行组织的,这样一来,它就和面向对象程序语言紧密结合在了一起,任何对于数据库的操作都是以对象调用方法的手段来实现的。
例如:
①打开已有的或新建一个db4o数据库我们使用Db4o.OpenFile()函数;②保存对象我们只需要在数据库对象上简单的调用Set()方法并传入适当的参数即可;③查询的3种方法:
QBE(QueryByExample)(通过向数据库提供一个模板,系统将会返回所有成员数据非默认值的对象),db4o本地化查询(NativeQuery)(主要的查询接口,采用强类型的方式)和SODA查询接口(一种底层的查询接口,它提供了向后兼容的能力并且对于动态生成查询十分有用);④更新对象只需要在修改对象后再次调用同样的方法Set()就可以了;⑤删除数据库中的对象使用Delete()方法。
面向对象数据库通过对这样一些方法的调用实现对于数据库的操作,和关系数据库不同的是,我们并不能看到它里面实际的数据存储模式,因此它实际为使用者屏蔽了许多底层的细节,我们只需要定义类结构(包括类中的属性成员和方法成员),我们便可以将类的实例(对象)进行存储,当它和某种程序语言结合起来时,我们几乎感觉不到我们用到了数据库,因为我们不需像关系数据库那样,既要使用数据操作语言又要使用相应的宿主语言,这是面向对象数据库的一大优势。
另外,随着面向对象编程技术在工业领域的应用已经进入了一个稳定的发展,为了决降低访问和整合信息数据)的复杂度问题,LINQ(LanguageINtegratedQuery)语言诞生了,在db4o7.2版本后,发布了程序集Db4objects.Db4o.Linq,要使用要使用linqtodb4o,只需要在项目中引用这个程序集。
借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。
LINQ的语义:
FROMtemp_varINset_object|DB_object
WHEREwhere_definition
[ORDERBYexpr]
SELECTvalueofbeingselectedfromtemp_var
[GROUPBYexpr]
LINQ必须以select或者是groupby结束,它的查询返回值的类型是临时变量的类型,可能是一个对象也可能是一个集合。
并且LINQ的查询表达式是在最近一次创建对象时才被编译的。
通过LINQ来查询db4o为使用者带来了很多方便,不过现在linqtodb4o还没有非常成熟,期待其更加完善成熟。
4面向对象数据库的主要优势
通过上面的分析,结合具体的应用,我们可以看到面向对象数据库有以下明显的优势:
(1)大型应用程序和数据结构的存储。
面向对象数据库不仅能存储复杂的应用程序,而且还能存储较大的数据结构。
尽管关系数据库支持大量的元组,但单个元组的大小受到限制。
有些关系数据库在这方面有所放松,但带来了数据库重组复杂与管理效率低等问题。
面向对象数据库不会因为有大量对象的存在而降低了性能,因为不管对象的特性有多复杂,应用程序都没有必要把对象分离或装配。
这样就使得面向对象模型支持复杂应用,应用中数据的复杂性越高,数据间相互的关系越复杂,性能的提高也越大。
(2)对象的直接引用。
应用程序可以对对象直接引用,这样就降低了数据的冗余,有利于数据完整性维护,实现数据的共享,提高了对于数据的搜索和访问能力,在关系数据库中,复杂的数据集必须由应用程序组装,使得效率大打折扣。
(3)数据库与高级程序语言的无缝连接。
面向数据库可以与高级程序语言实现无缝连接,这为它自身提供了优良的应用开发环境。
(4)简化并发控制。
在关系数据库中,应用程序必须显示地对数据库进行封锁,还要考虑封锁类型,而且对某张表或其中部分元组的封锁可能会影响其他的表或元组的封锁,而面向对象数据库的并发控制以对象为封锁单位,相关的数据由对象本身的结构决定,一些控制可由对象的方法和触发器完成,这样大大简化了并发控制。
5结束语
从以上对于两种数据库技术的分析我们可以看到,RDB技术虽然在应用过程中还存在着一些让人不满意的地方,但毕竟经过了近40年的发展(普遍认为,1970年,EdgarFrankCodd发表的题为“大型共享数据库的关系模型”的论文是关系数据库系统的开端),这种技术已经发展得相当的成熟,在计算机的数据库领域它占有重要的地位,因此在近几年或十几年,RDB技术仍是大多数数据库设计人员的首选。
另一方面,对于OODB技术而言,虽然它成为下一代数据库技术的代表,这其中仍有许多的技术难题需要解决,需要在具体的应用中不断地加以扩展和完善。
因此这两种技术的发展虽然是不同步的,但RDB技术为OODB技术做了铺垫,随着Java,C#等面向对象程序语言的不断发展和应用的不断深入,随着计算机网络的不断普及和完善,OODB技术也会在数据库领域得到更广泛的发展前景。
参考文献:
[1]朱亚楠.面向对象数据库技术及其前景分析[J].软件导刊,2009
(2).
[2]王功明.面向对象数据库发展和研究[J].计算机应用研究,2006(3).
[3]萨师煊,王珊.数据库系统概论[M].北京:
高等教育出版社,2002.
[4]毛国君.高级数据库原理与技术[M].北京:
人民邮电出版社,2004.
[5]万里开源软件有限公司.MySQL5.1参考手册(中文)[Z].2006-7-27.