要说实现对象数据库的的话,首先要提到关系数据库。关系数据库的概念我不多说了,大家可以在baidu上一簸箕一簸箕的查到。关系数据库现在仍然是使用的主体,但是随着面向对象化的发展,对象数据库也应该成为现在的一种概念了。当然,概念和实现还是有差距,我自己试着做了。
首先明确一些概念:
xmlDocument对象:是基于DOM的。
xmlSerializer对象:可以用于串行化和反串行化通用类型。
串行化:XML串行化是将数据库的集合转换为信息流的过程。
反串行化:将信息流转换回原先生成该信息流的数据。
我的思路是:
因为现在接口之间都是用xml字符串传输的,我觉得数据的存储也可以用一个xml字符串来进行。于是我就在数据库oracle创建方式为一个表格就是一个对象,表格中只有一个nclob字段,将要存储的对象用串行化(不同的平台不一样,例如我现在用的vs2005、vs2008平台是XmlSerializer对象)的方法解析成字符串存储到数据库中,同理当我取这个数据的时候用反串行化将其整合成对象。如此做法,我虽然在数据库是用字符串存储的,但是我的实际操作都是用对象,因为我在中间层用串行化和反串行化来控制。在数据库中摆脱了数据库的关系链接,缺点是在vs2005、vs2008平台下xmlSerializer对象比较耗资源,这个是因为xmlSerializer在做串行化和反串行化处理的时候,需要将xml信息流存入内存中,以至于程序所需的内存量将与要处理的信息流大小成正比。
作为一个数据库添加、删除、查询数据的操作比不可少,下面我就来进行这些操作的在我程序中是怎么实现的:
(我原本是用NHibernate来操作数据库的,其实这里用什么方式都可以)
1、添加,串行化后正常添加即可。
2、查询,通过xmlDocument对象查询对象中相关属性的内容进行查询。(在这里我使用的是xmlDocument中的GetElementsByTagName这个可能根据不同工作平台方法不一样)。
3、修改,通过xmlDocument对象查询对象中相关属性的内容进行查询,查询到要修改的数据以后在将数据串行化成对象,在对象进行修改,再反串行化后进行数据库的更新即可。
4、删除,通过xmlDocument对象查询对象中相关属性的内容进行查询,并将这个字段删除即可。
这种做法在上层实现了对象化管理的数据库,可是问题在于数据量较大的话比较慢,并且不太适合服务器端,消耗太大。但我希望能对大家的思路有所帮助。