今天这篇是关于OO VS. RDB的,OO作为一种编程范型,主要是集中于处理“操作”,而RDBMS作为一种数据管理工具,主要是集中于“数据”。但是,在一个需要数据库的系统中,必然的情况是:操作的对象自然是各种各样的数据,而数据的管理,自然要通过操作。因此,OO与RDB,从最初浅的角度来理解,虽然分别位于“业务逻辑层”与“数据层”,但是相互之间却又有着非常紧密的联系。在OO与RDB之间存在着的紧张关系,其根源在于:“OO世界中的数据是被封装的孤立数据;RDB世界中的操作是针对行集的。”
因此,一个对象实例内部的数据,应该保存到数据库中的哪些表、哪些行、哪些列,是一个非常复杂的问题。反过来说,当我们要在内存中恢复一个对象实例时,要从多少表、多少行、多少列中采集数据,并正确转化为对象实例的内部数据,也是相当的复杂。O/R Mapping,需要考虑的问题还不止于此,在RDB中自然存在的“关系”这一概念,在OO当中,却没有明确的对应概念。在OO的世界里,对象之间存在各种各样的关系,却非常难以进行规范化的描述。再加上:“添加、修改、删除、查询”等等情况的O/R映射,以及与“关系”相关的“级联操作”——“级联添加、级联修改、级联删除、级联查询”,一个好的O/R Mapping工具,要做出来真是千难万难。
很多人都意识到了这一点!是的,问题的确存在。但是,为什么呢?该怎么办呢?几乎没有人会反思OO的不是,而是想当然的认为:“关系数据库技术太老了,跟不上OO技术的进步,因此,我们需要OODB这样的能够直接支持OO的数据库。”
“以其昏昏,使人昭昭”的事情,从来没有发生过。依着我前面的分析,在OO这样的基础薄弱的理论上,怎么可能搞出有实用价值的数据库呢?
在看到了徐昊的《
关于面向对象设计与数据模型的精彩论述》之后,我相信自己找到了知音。他说:“OO在数据模型设计上
不具有思维简洁性。”并且提出了一个重要的词汇:“
边语义”!这使我相信,和我有类似想法的同志,是存在的。后来又现场听到了曹晓钢同志的《
ORM时代的数据访问技术》的演讲,并且在他的笔记本里看到了他做的一些代码,居然与我的很多想法不谋而合!再加上后来与徐昊的几次MSN交流,终于使我敢于开始写这样一篇“OO丧钟”的文章,因为,我相信自己并不是孤独的反对者。
OO可以从关系型数据库那里借鉴些什么呢?
1、关系:也就是徐昊所说的边语义。在OO中,对象与对象之间是否存在关系,在对象之外是不知道的。当一个对象被封装起来以后,他内部是否使用、关联、组合了其他的对象,是不可知的。因此,我们看到的通常的OO图,只能说是Object被剖开了以后的对象图。事实上,关系是被隐藏起来的。而在RDB中,关系非常明确的被定义与标识出来,一目了然。这将带来巨大的描述效果。相比起UML Class图,E-R要容易理解得多。
2、Primary Key:这是RDB特有的概念,在OO中没有对应概念。因此,我们要判断两个对象是否相等,就相当困难。如果每个对象都有一个“一次设置,终身不变的Primary Key”,那么对象之间的比较语义,就能够被清楚的区分为:IS和LIKE。IS就是Primary Key相同的两个对象,他们应该完全一致,甚至在内存中,也只应该保存一份。LIKE,就是成员数据相同的两个对象,他们不是一个东西,仅仅是像而已。
3、SQL:这也是RDB特有的语言,而在OO的世界里,查找一个对象的工作,从来没有被规范过。
目前就先想到这些,可能还需要再补充。
(未完待续)
分享到:
相关推荐
后关系型数据库的主要特征是将多维处理技术和面向对象技术集成在一起,从而能够提供事务处理应用开发所需的高性能和灵活性,同时支持应用和数据的复杂性,并...从目前来看,后关系型数据库不太可能取代关系型数据库。
非关系型数据库(NoSQL)是一种不同于传统的关系型数据库的数据存储模型。在信息化时代,随着大数据、云计算和互联网应用的快速发展,NoSQL数据库因其高可扩展性、高性能、灵活的数据模型等特点,逐渐受到广泛的关注...
非关系型数据库的优势在于能轻松处理大规模数据,模式灵活,读写速度通常更快。但非关系型数据库往往不支持完整的ACID事务,工具和技术相对较少,数据一致性可能有限。 3. 适用场景 关系型数据库常用于需要高度一致...
【关系型数据库】 关系型数据库是基于关系模型的数据存储方式,它的核心是二维表格,每个数据表由列和行组成,列代表属性,行代表记录。埃德加·科德在1970年提出的这一概念,经过40多年的发展,已经形成了包括...
电子档案技术规范:DAT 57-2014 档案... 档案关系型数据库转换为XML文件的技术规范 1 范围 本标准规定了档案关系型数据库 本标准适用于各类各级综合档案馆、机关、团体、企业事业单位和其他社会组织对档案关系型数据库
关系型数据库+Mysql+查询用户连续登陆天数+数据统计 关系型数据库+Mysql+查询用户连续登陆天数+数据统计 关系型数据库+Mysql+查询用户连续登陆天数+数据统计 关系型数据库+Mysql+查询用户连续登陆天数+数据统计 关系...
对于初学者来说,理解数据库的基本概念和关系型数据库的重要性是至关重要的。 首先,我们要了解什么是数据库。数据库是一个集合,其中包含了按照特定规则组织的、可共享的数据。它不仅仅是一个存储空间,更是一个...
jdbc连接所有关系型数据库 包括七种主流的关系型数据库 1:MS SQL Server 2:PostgreSQL 2:Mysql 4:DB2 5:Oracle 6:Sybase 7:informix
第1章-关系型数据库简介
关系型与非关系型数据库 关系型数据库和非关系型数据库是两种不同的数据库管理系统。关系型数据库使用 Structured Query Language(SQL)来管理和存储数据,而非关系型数据库使用其他查询语言和数据模型来存储和...
首先,我们要理解关系型数据库的基础——SQL(结构化查询语言)。SQL是用于操作关系数据库的标准语言,包括数据查询、数据更新、数据插入和数据删除等操作。在Oracle和MySql中,SQL语句的执行涉及到解析、优化和执行...
关系型数据库和非关系型数据库对比介绍
关系型数据库和后关系型数据库是数据库领域两个重要的概念,它们反映了信息技术发展中数据管理的演进。关系型数据库,以其二维表结构为基础,曾长期主导数据库市场,但在处理非结构化数据、高并发和大数据量场景下...
MySQL是世界上最流行的关系型数据库管理系统之一,尤其适合于中小型企业和个人网站的数据存储。在“练就MySQL高手——创建自己的第一个数据库”中,我们将探讨如何开始使用MySQL,包括连接到服务器,创建、删除...
关系型数据库和非关系型数据库.doc
《关系型数据库设计——银行业务管理系统》 设计一个银行业务管理系统需要深入了解银行的业务流程和数据需求。在本文中,我们将探讨系统的需求分析、实体关系(E/R)模型的建立,以及物理数据库模型的设计。 首先...
非关系型数据库(NoSQL,Not Only SQL)是近年来在大数据处理、分布式系统等领域广泛应用的一种数据库类型。相较于传统的关系型数据库,NoSQL数据库在处理大量数据、高并发场景下具有更好的性能和可扩展性。本实验是...