`
庄表伟
  • 浏览: 1159450 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

敲响OO时代的丧钟——OO能从关系型数据库借鉴些什么?

阅读更多
今天这篇是关于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的世界里,查找一个对象的工作,从来没有被规范过。
 
目前就先想到这些,可能还需要再补充。
 
(未完待续)
分享到:
评论

相关推荐

    后关系型数据库管理系统

    后关系型数据库的主要特征是将多维处理技术和面向对象技术集成在一起,从而能够提供事务处理应用开发所需的高性能和灵活性,同时支持应用和数据的复杂性,并...从目前来看,后关系型数据库不太可能取代关系型数据库。

    山东大学 软件学院 非关系型数据库ppt.zip

    非关系型数据库(NoSQL)是一种不同于传统的关系型数据库的数据存储模型。在信息化时代,随着大数据、云计算和互联网应用的快速发展,NoSQL数据库因其高可扩展性、高性能、灵活的数据模型等特点,逐渐受到广泛的关注...

    关系型数据库和非关系型数据库.pdf

    【关系型数据库】 关系型数据库是基于关系模型的数据存储方式,它的核心是二维表格,每个数据表由列和行组成,列代表属性,行代表记录。埃德加·科德在1970年提出的这一概念,经过40多年的发展,已经形成了包括...

    关系型数据库和非关系型数据库对比介绍

    关系型数据库是基于严格的数据模型来组织数据的,其结构通常由表、行和列组成,这些表之间通过关系相互关联。关系型数据库的代表有MySQL、Oracle、SQL Server和SQLite等。关系型数据库最大的特点在于事务的一致性,...

    11.2.1 什么是非关系型数据库?.md

    11.2.1 什么是非关系型数据库?

    关系型数据库与NoSQL数据库_张华强.pdf

    关系型数据库从诞生到现在经过几十年的发展,已经变的比较成熟,目前市场上主流的数据库都为关系型数据库。 关系型数据库的优势: * 容易理解:关系模型中的二维表结构非常贴近逻辑世界,相对于网状、层次等其他...

    大数据与云原生(解决方案专场)——RadonDB:新一代分布式关系型数据库 共25页.pdf

    ### 大数据与云原生解决方案:RadonDB——新一代分布式关系型数据库 #### 引言 随着云计算和大数据技术的飞速发展,企业对于数据处理的需求也日益增长。传统的关系型数据库在处理大规模数据时逐渐显露出局限性,...

    网站维护杀手锏——网络编程——ASP、PHP、JSP与数据库互联.pdf

    常见的数据库包括关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)。开发者需要掌握SQL语言,了解如何创建、查询、更新和删除数据库中的数据。 5. 安全性与性能优化:在实际的...

    Android源码——数据库SQLite.zip

    在Android系统中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。这个压缩包文件"Android源码——数据库SQLite.zip"可能包含了关于Android中...

    第1章-关系型数据库简介

    第1章-关系型数据库简介

    理解非关系型数据库和关系型数据库的区别.zip

    MongoDB中的一个文档相当于关系型数据库中的一行,多个文档构成了集合(collection),集合类似于关系型数据库中的表。 (3)文档 (行数据): 文档则相当于传统关系型数据的行数据,对于集合中的介绍,我们基本...

    认识关系型数据库

    关系型数据库基础知识,包括关系数据模型三要素:数据结构、数据操作、完整性约束的初步讲解

    关系型数据库的(优化)工作原理

    首先,我们要理解关系型数据库的基础——SQL(结构化查询语言)。SQL是用于操作关系数据库的标准语言,包括数据查询、数据更新、数据插入和数据删除等操作。在Oracle和MySql中,SQL语句的执行涉及到解析、优化和执行...

    练就MySQL高手——创建自己的第一个数据库.pdf

    MySQL是世界上最流行的关系型数据库管理系统之一,尤其适合于中小型企业和个人网站的数据存储。在“练就MySQL高手——创建自己的第一个数据库”中,我们将探讨如何开始使用MySQL,包括连接到服务器,创建、删除...

    基于PHP+MYSQL特色资源数据库研究与实现——以新余学院胡述兆文库数据库建设为例.pdf

    MYSQL作为一款成熟的关系型数据库管理系统,不仅提供强大的数据存储能力,还支持复杂的数据操作和查询。结合B/S模式的架构设计,用户可通过浏览器轻松访问数据库,满足了现代图书馆服务对便捷性的需求。 在数据库的...

    免费资源第一弹:关系型数据库-第一节

    此外,关系型数据库支持定期备份,即使在遇到硬件故障或其他灾难性事件时,也能迅速恢复数据。随着业务的增长,数据库可以进行扩展,以适应更大的数据量和更高的访问频率。 在实际应用中,关系型数据库的实例包括...

    java数据库课程设计——图书馆管理系统源码,数据库备份,文档

    此系统可能采用了关系型数据库,如MySQL或Oracle,来存储图书信息、用户信息以及借阅记录等数据。数据库设计是关键,需要合理规划表结构,确保数据的一致性和完整性。例如,可能有图书表(包含书名、作者、出版社等...

    自己动手写数据库-基于Java语言的简易关系型数据库.zip

    自己动手写数据库--基于Java语言的简易关系型数据库关系型DB从0到1——基于Java语言的简易数据库本项目旨在练习实现一个基于Java语言的简易关系型数据库,用于学习关系型数据库(如Mysql)的设计思想、核心重构、...

Global site tag (gtag.js) - Google Analytics