O-R Mapping 从字面上理解是在 面向对象体系 与 关系数据库 之间进行映射.
不过最近为了写 TOB 的 ORK 模型资料, 更进一步研究了 Entity-Relationship 模型以及相关的 网络模型, 关系模型 和 Entity Set 模型. 然后有个惊人的发现:
ORM 所支持的 POJO 模型本质上其实是网络模型, 而 O-R 的 Mapping 其实是在 网络模型 和 关系模型之间进行映射.
--有了这个发现, 总算对一直以来对 ORM 和 POJO 模型的一些感性的抵触有了一个理性的认识.
认定 ORM 所支持的 POJO 模型为 网络模型, 判断如下:
1. 对象之间的关联是通过 单边(Unidirectional)或者对等(Bidirectional)的引用(Reference)或者引用集合(Reference Set)建立起来的. 没有独立的 Relationship 载体.
2. 对等(Bidirectional)的引用或引用集合之间也存在不自然的单向性, 其中必有一方为 Owner, 而另一方为 Member. 这是网络模型的特有特征.
而关系模型下 实体 之间的关联是通过独立的 关系记录 代表的, 而 关系记录 上也可以有自己的属性, 很多情况下这些 关系属性 非常重要, 使关系模型能够比网络模型更接近现实世界的结构. 比如一辆汽车的组装模型, 用到某种型号的螺母, 而这种螺母的单车用量, 作为 车型 与 螺母型号 两个实体之间的 关系属性 才最为恰当.
人们一直认为 关系模型 与 面向对象体系 之间无法完美融合, 也遭遇了多方面的尝试失败, 但是以目前我的研究分析结果来看, 这其中的根本原因是大家还没有认识到这些失败的研究和尝试仅只是在用 面向对象的方法 去实现 网络模型 的持久数据管理系统.
目前成熟的面向对象数据库, 比如为 Java 和 .Net 设计的 db4o
http://www.db4o.com 其实是网络数据库. 通用面向对象程序设计语言 (General Purpose Object Oriented Programming Language), 特别是广泛应用的一些, 像 C++, Java 方面, 始终没有本土的关系模型数据库出现. 而应用程序开发领域广泛采用了这些 通用面向对象程序设计语言, 并且难以割舍.
加上 Hibernate 所引领的层出不穷的 ORM 框架产品, 呈现给人一种感觉, 那就是, 面向对象 与 关系模型 水火不容, 只能 Mapping.
但是事实上, 众多传统关系数据库产品早已加入了面向对象的思想特性, 称为 Object Relational Database
http://en.wikipedia.org/wiki/Object-relational_database, 像 Oracle 8 以后就是. 更有甚者比如 InterSystems 的 CACHÉ
http://www.intersystems.com/cache/index.html, 自称为 Post-Relational Database, 而其实已经可以通过完全的面向对象的语言来进行数据库开发, 只不过用的是自家(Home Grown)的OO语言.
而通用OO语言一直没能融合关系模型的一个根本原因, 是大家总是拒绝向内存对象模型引入 "关系对象" 的概念, 而这是 关系模型 区别于 网络模型 的根本特征之一.
不过在传统的以磁盘为主体存储的数据库系统中, "关系对象" 所建立起来的 "关联" 自然而然的完全存在于逻辑上, 这同时也使得对 "关联" 的操作非常简单, 只有3件事:
1. 创建关系对象以建立关联
2. 删除关系对象以解除关联
3. 指定 JOIN 以引用关联
这里的 3, 限定了对关系数据的访问只能是通过 SQL, 一种不可能 OO 的语言.
目前的数据库市场仍然还是 以磁盘为主体(Disk Targeted) 的数据库产品的天下, 所以天经地义的, 关系模型与 SQL 之间, 在人们心里存在一个等号.
但是随着64位计算的日趋普及, 大内存也成为趋势, 于是现在已经出现了新的可能:
在内存里建立关系模型的对象数据!
而基于日趋成熟的代码生成技术, 用注入的逻辑自动维护内存中关系模型下对象之间的引用关系也变为可能, 创建 和 删除 关系对象 时, 已经完全可以由数据库系统来自动修改它所连接起来的其他 持久对象 的 连接引用(Joint Reference), 从而维护整个内存中关系模型拓扑图的完整.
结论是: 对象技术其实不必借助 Mapping 就能实现和利用 关系模型, 现有的 ORM 其实只是在进行 OO语言编写的网络模型 到 关系模型 的映射.
面向对象的关系模型已经不是凭空的设想, 而是已经有可以实际应用的数据库产品, 就是我已经开发完成的 Ableverse The Object Base
http://tob.ableverse.org, 它也不仅只是一个研究产品, 从开源的 WoW
http://www.webofweb.net 产品表现, 可以看到它的商业质量.
不过 TOB 目前公开发行的还是版本 5, 开发时编译步骤还相对复杂.
计划元旦以后发布版本 6, 这个版本只需JDK6的javac, 没有任何多余步骤, 只需按平常开发Java程序的方法就可以编写基于TOB的持久应用, 通过Apache Ant, 也可以和流行Java IDE很好的集成.
基于TOB的持久应用, 全部源码只需Java类代码, 并且相对于 直接JDBC操作关系数据库, 或通过ORM方式, 数据库性能有几倍到几千倍的提升, 是关系数据库后台存储上的内存数据库性能.
分享到:
相关推荐
在软件开发中,尤其是使用面向对象(OO)方法设计系统时,对象到数据库的映射(Object-Relational Mapping,ORM)是一个至关重要的概念。ORM技术允许开发人员使用面向对象的语言来操作数据库,减少了直接编写SQL语句...
文档覆盖了 Hibernate 的核心概念,如对象关系映射、持久化模型、事务处理和查询语言等,并探讨了它在处理复杂数据库结构,如继承关系和关联映射时的策略。 1.3 **读者对象** 该文档适用于 Java 开发者、系统架构师...
- Hibernate:是一个用于对象关系映射(ORM)的开源框架,它提供了一种机制,通过使用Java来操作数据库,不需要编写大量SQL语句,简化了数据库操作。 - WebSphere、WebLogic:都是企业级Java应用服务器。它们提供了...
总结来说,Grove Kit 2008 是一个功能丰富的 ORM 解决方案,它通过简化数据库操作,使开发者能够更高效地编写业务代码,同时保持良好的可维护性和可扩展性。通过配置文件管理连接,使用 `ObjectOperator` 进行数据...
常见的耦合类型包括正常耦合、公共耦合、外部耦合和内容耦合,其中低耦合度被认为是更好的设计。 接着,内聚(Cohesion)衡量一个模块内部的元素间的关系紧密程度。高内聚的模块专注于单一任务,这样更容易理解和...
1. 数据模型:如关系模型、对象模型和NoSQL模型,它们描述数据的结构和操作方式。 2. SQL:结构化查询语言,用于创建、查询、更新和管理关系数据库。 3. ACID特性:原子性、一致性、隔离性和持久性,保证数据库事务...
【hibernate】是Java开发中的一个著名的持久化框架,它提供了一种对象-关系映射(ORM)机制,使得开发者可以用面向对象的方式来操作数据库,从而简化了数据库操作的复杂性。ORM允许我们将Java对象直接映射到数据库表...
(1) Hibernate是一个面向Java环境的对象/关系数据库映射工具,Hibernate不仅管理Java类型到数据库表的映射,还提供查询数据和操作数据的OO方法。 (2) Hibernate对JDBC进行了轻量级的对象封装,使Java程序员可以...
本文将深入探讨"snmphibernate.api"这一项目,它属于org.opengoss.snmphibernate.api,主要涉及SNMP(简单网络管理协议)与Hibernate ORM(对象关系映射)的整合应用。我们将从源代码的角度,解析其设计理念,核心...
ORMLite是Java和.NET平台上的轻量级ORM框架,它为开发者提供了一种简单、高效的方式来管理数据库。 **一、ORMLite简介** ORMLite的核心目标是减少在应用程序和数据库之间手动编写SQL语句的需求。通过ORMLite,...
Hibernate允许开发者用Java对象模型来操作数据库,通过ORM(对象关系映射)技术将数据库表映射为Java类,从而简化了数据库操作。在Java论坛源码中,Hibernate可能用于处理用户注册、发帖、回帖等与数据库交互的功能...
本文作者主张在项目早期由开发者参与数据库设计,尤其是熟悉面向对象编程(OOP)和对象关系映射(ORM)的开发者,他们设计的数据库更适应需求变化,这可能源于规范化设计与OO思想的相似性。而数据库管理员(DBA)在...
MyBatis和Hibernate则是常用的ORM(对象关系映射)工具,它们将数据库操作与业务逻辑解耦,提高了开发效率。 综上所述,"JAVA高级开发必备"不仅涉及Java语言基础,还包括了高级特性和最佳实践。对于想要在Java开发...
GraphQL-工具-序列化集成和对象关系映射器(ORM)。关于这个模块提供了包装器和 Object-Relational-Mapper(ORM)的集成,以便通过对实体及其与基础RDBMS的关系进行。 它提供了GraphQL模式定义条目的功能及其相应的...
Core Java是Java的基础,包括Java语言的核心特性,如标识符、关键字、数据类型、表达式、流控制、数组、面向对象编程(OO思想)、异常处理、GUI编程、事件处理模型、线程、标准I/O流与文件处理、网络编程等。...
它通过ORM(对象关系映射)将数据库模型与应用程序代码解耦,提高了开发效率。 2. **自定义分页**: 在文档中,作者提供了一个名为`Find`的方法,该方法接受一个谓词表达式`criteria`用于定义查询条件,`pageIndex...
Java框架是开发高效、可维护性高的企业级应用的关键工具,Struts、Hibernate和Spring是Java领域中的三大经典框架,它们各自在Web层、数据持久层和应用集成层发挥着重要作用。下面将详细介绍这三个框架的核心功能和...
- **数据库(Database)**:讨论了面向对象系统与数据库之间的集成问题,包括对象-关系映射(ORM)、数据持久化等技术。 - **编程风格(Program Style)**:良好的编程风格对于提高代码质量至关重要,包括命名规范、注释...
10. **Entity Framework**:理解ORM(对象关系映射)的概念,学习使用Entity Framework进行数据库操作,实现数据访问层的简化。 通过阅读本书,开发者不仅可以提升ASP.NET 4.5的编程技能,还能掌握现代Web开发的...