映射的基本原理

原创 2004年09月14日 10:48:00

原文来自http://www.agiledata.org/

现在大部分时髦的商业软件是用对象语言比如JAVA和C#开发,并用关系型数据库存贮数据。当然这并不能说你就不能有其它的选择,有许多程序就是用过程语言比如COBOL来开发的,并且很多系统使用对象数据库或者XML数据库来保存数据。不管怎样,到目前为止对象语言加关系数据库仍是标准,所以我假定你是工作在这种情况下。如果你正在用不同的储藏技术工作那麽许多观念仍然可适用,虽然这可能会被修改。

在对象语言和关系型技术之间存在“阻抗失谐”,对此项目团队一般是开发一个软件做为系统的基础。这样可以很容易的克服“阻抗失谐”的问题,这个密诀表现为两个方面:你需要了解映射对象到数据库的过程和在一个数据库中映射表之间的关系。

1、敏捷DBA的角色

图1:显示敏捷DBA角色映射到对象到关系数据库。这里有三个主要活动是我们所感兴趣的:

(1)映射。映射的基本目标就是确定对于一个持久对象的数据所确定的有效策略。这包括保存个体对象的数据属性和对象之间的关系,以及所有类之间继承结构的关系。

(2)实现映射。

(3)性能调整。

一个有趣的事是关于图1:敏捷DBA和应用开发者一起工作在所有的三个活动上。尽管敏捷DBA是负责确保映射有效,但是他们不会单独对实际的成果负责。其它的工作也不会是单独行事,这就是敏捷软件成功的秘密。

2、基本理念。

当开始学习对象映射到数据库的第一步就是对象的数据属性。在关系数据库中一个属性将被映射到零到多个列中。记住,不是所有的属性都被持久化,临时计算属性就不用。举个例子,你的程序中的“学生”对象有一个“平均分”的属性,不过它不用保存在数据库中,因为它是在程序中计算出来的。有的属性是一个类,一个“客户”对象有一个“地址”类做为属性,这真实的反映了两个类之间的联合很有可能被映射,并且“地址”类本身的属性也要被映射。重要的事是清楚的定义:一些点上的属性会被映射到零到多个列上。

最简单的映射是将单独的属性映射到单独的列上。它们有同样的基本类型,举个例子:它们全是日期类型,属性是STRING而列是CHAR,或者属性是NUMBER而列是FLOAT。

映射术语

Mapping(v)。对象及其它们之间的关系被持久化在永久数据存贮器中,持久化在关系型数据库中。
Mapping(n)。对象的属性或一个关系被持久化在永久数据存贮器中。
Property。数据属性,任一一个实现可以是如“FirstName”字符类型的物理属性,也可以是一个经由如返回一个顺序的总和的“getTotal()”操作。
Property mapping。描述映射如何持久化对象的属性。
Relationship mapping。描述如何持久化两个或更多对象之间的关系(联合、聚合、合成)。

某种程度上类映射到数据表比较简单,但并不是总是直接的。除了非常简单的数据库以外你将会无法有一对一的对表的类映射,稍后在本章中你会注意到有关“映射继承”。然而,一个你在本章各处将会看见的通常主题是对一张表映射的一一个类对你的起始映射是较好的。

现在,让我们从简单的入手。图2描述了两个模型,一个UML图和一个物理数据模型,两个图表为一个次序系统描述简单的实例部分,你可以看到类的属性可以被映射到数据库的列上,举个例子“order”表的“DataFulfilled”列被映射到类“order”的“DataFullfilled”属性上。

图2



 初始的属性因为几个理由是很容易被确定的。首先,命名的标准适用于所有的模型,敏捷建模的一个方面是应用于建模标准惯例。第二,很有可能由同一个人建立所有的模型。当人们在分开的团队中工作时他们的解决是通常会改变的,即使他们工作的很好。因为他们不同的设计决定了不同的方法 。第三,一个模型可能由其它模型来驱动开发。在“不同的项目需求不同的策略”一节中,我们讨论了当你开发一个新的项目时对象实例将驱动你的数据库实例的开发。

即使两个实例像图2描述的那样相似仍有不同,不同就意味着映射将不会是完美的,两者不同表现为:

(1)在对象实例中对于TAX有几个属性,而数据库中仅有一个。当对象保存数据时,大概要将“order”类的TAX的三个属性累加并保存到“order”表的“tax“列。然而,当对象被读入内存,三个属性需要被计算。

【SSH进阶之路】Hibernate基本映射(三)

【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月17日 08:19
  • 35845

软考三 cache地址映射

所谓映射就是将主存内容对应到cache中。
  • lishuangzhe7047
  • lishuangzhe7047
  • 2013年10月15日 11:00
  • 2072

垃圾回收器的基本原理

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过...
  • Amen_Wu
  • Amen_Wu
  • 2017年01月09日 23:25
  • 1363

从直方图反向映射进行简单的图像显著性检测Simple Image saliency detection from histogram backprojection

Simple Image saliency detection from histogram backprojection Image saliency detection is a...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年02月29日 19:52
  • 1823

MapReduce的基本原理

MapReduce是一个软件框架,可方便的编写应用程序,以并行的方式在数千商用硬件组成的集群节点中处理数TB的数据,并且提供了可靠性和容错的能力。 MapReduce处理模型包括两个独立的步骤: ...
  • u013063153
  • u013063153
  • 2016年11月10日 15:50
  • 636

【SSH】——Struts由来以及基本原理

Struts,最初的意思是:框架的,支杆。用来支持JSP,Servlet等技术在Web项目中的应用。它的目的是帮助我们减少在运用MVC设计模型来开发Web应用的时间。          在...
  • u013035538
  • u013035538
  • 2016年07月06日 22:44
  • 449

软件工程的七条基本原理是?

1、用分阶段的生命周期计划严格管理 2、坚持进行阶段评审 3、实行严格的产品控制 4、采用现代程度设计技术 5、结果应能清楚地审查 6、开发小组的人员应该少而精 7、承认不断改进软件实践的...
  • cdh1213
  • cdh1213
  • 2014年03月11日 10:38
  • 512

Dijkstra算法原理

原文地址: http://www.cnblogs.com/skywang12345/p/3711516.html Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最...
  • yalishadaa
  • yalishadaa
  • 2017年02月19日 22:46
  • 744

存储器层次结构 - cache基本原理

局部性原理 局部性原理表明了在任何时间内,程序访问的只是地址空间相对较小的一部分内容。以下是两种类型的局部性: 时间局部性 如果某个数据被访问,那么在不久的将来它可能再一次的被访问。例如大多数程...
  • kickxxx
  • kickxxx
  • 2013年05月27日 15:43
  • 2790

Linux设备驱动模型3——platform平台总线工作原理

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 四、platform平台总线工作原理1 1、何为平台总线? (1)属于总线中的一种,相对于usb、pci、i2c等物理总线来说...
  • oqqHuTu12345678
  • oqqHuTu12345678
  • 2017年07月21日 09:34
  • 636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:映射的基本原理
举报原因:
原因补充:

(最多只允许输入30个字)