`
canonical
  • 浏览: 367003 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关系模型与ORM

阅读更多
    关系数据库模型在理论上主要解决的是消除数据冗余的问题。关系模型的数学基础是所谓的集合论,而集合的基本含义正是一组具有某种原子性的互不相同的元素。面向对象技术是对相关性进行局域化的一种手段(相关的数据和操作聚集到同一对象名义下),在这一局域化过程中,相同的元素被识别出来,成为独立的对象。从某种意义上说,关系模型与对象模型是殊途同归的过程,是从不同侧面对同一事物的反映。关系模型中,我们关注的重点是元素组成的集合,允许的连接关系定义在集合之上。而在对象模型中,我们关注的首先是横向关联的实体,实体之间具有稳定的联系。在概念层面上,从对象模型映射到一种关系存储模型只是一个分组问题。为了断开实体之间的直接联系,关系模型创造了一个id字段,而对象模型并不是需要显式id的。在关系模型中,关联并不是通过某种存在的结构来表达的(一个实体持有另一个实体的指针,拥有直接联系),而是将直接关联问题弱化为某种计算过程,我们必须检查id的值(不是某种直接的存在性),通过某种运算过程才能重新发现数据之间的关联。
   
    通过id(伴随一个匹配计算过程)来进行间接关联对于保证模型的一致性是非常关键的。在ORM中恢复了对象的强关联其实会造成很多潜在的复杂性。例如为了维护对象层面结构的一致性,在更新父子关系的时候,我们需要同时调用 child.setParent(parent); parent.getChildren().remove(child); 当关联结构更加复杂的时候,这里所需要的维护工作是随之增加的。不过,在ORM中,对象的形态是暂时性的。在ORM的一次session的操作过程中,对于对象状态的修改可以是不一致的。例如我们可以只调用child.setParent(parent); 而不需要同时  parent.getChilren().remove(child); 只要我们在此次session操作中,不需要同时用到parent.getChildren(). 这种关联的暂时性对于很多ORM应用来说是必不可少的。
   
    对象模型中可以直接表达的结构关系比关系模型要丰富一些,例如继承关系,many-to-many, one-to-list等。但是所有这些都不是真正本质性的差异。抛弃概念诠释,基类与众多派生类之间的关系基本上可以等价于一组one-to-one关系。而当关联对象本身的重要性凸现出来的时候,当我们无法把它约化为对象上的一些附属特性的时候(例如数组的下标),我们必然要建立相应的关联对象,而这正对应于关系模型中的中间关联表。中间关联表上增加额外的字段是一个自然的扩展过程,而对象模型上做这样的扩充往往表现为形态上的重大的不兼容的变化,例如从getManyToManyEntity() -> getToManyRelation(), 这实际上意味着这里的对象形式是偶然的,简化的。
   
    在原始的关系数据库模型中,所有的表之间的地位是平等的,所有字段之间的地位是平等的(主键和外键在参与数据关联时和其他字段的处理方式一致)。这种概念上的均一性和普遍性往往被认为是理论的优美之处。但是现实世界是复杂的,发展的方向就是逐步识别出不同之处,并找出自然的表达形式将这些不同表达出来。均匀的关系模型是对称性最高的,最简化的模型。在面对物理约束时,它隐含的假设是集合之间很少发生相互作用,单表(表单到数据表之间的映射)和主从表是最广泛的情况。试着想象一下关系模型,在思维中一般我们只能看到两个数据表,当考虑到多个表的时候,因为这些表之间没有明确的可区分性,因此它们的意象是模糊的。只有明确意识到主键,外键,主表,从表,字典表,事实表,纬度表这些不同的概念的时候,当对称性出现破缺的时候,我们思维中的模型才能够丰富化起来。
   
    关系模型理论应用到数据库具体应用中时,并不需要死守关系范式教条,它们只是描述了某种极端化的对唯一性的追求。面对具体应用的时候,理论本身也在不断丰富化。我并不把现实应用中必然需要增加冗余字段看作是关系理论失效的结果。从关系完全分解,到关系完全不分解之间,我们可以建立大量的模型。建立冗余字段的时候,我们存在着大量可能的选择,到底哪一种选择是最优的,理论方面仍然可以给我们以具体的指导。理论在各种不同纯化程度的关系模型中都可以给我们以直观的建议。数据仓库理论中建立的snowflake模式和star模式,强调了针对主题域的允许部分冗余的关系分解。这里实际上是强调了表之间的不同性。不再是所有的表都处于同一地位。Fact Table和Dimension Table之间的区别被识别出来,并被明确处理。在我看来,这是原始关系模型的一种自然发展,它也是关系模型理论的一部分。理论不应该是单一的,而是提供一个模型级列,在不同的复杂性层次上,我们可以根据理论的指导选择具体的实现模型。
   
    关于ORM http://canonical.iteye.com/blog/111500
    关系模型中的所谓关系是在使用时刻才定义的,所有建立关系的方式在某种程度上都是等价的,也是外在的。而在ORM中主键与外键之间的关联被独立出来,成为模型内置的部分。这在很多时候简化了数据查询的结构构造过程。
    在ORM中主键因为缓存的存在而显出与其他字段的区别。ORM的使用使得数据存储的分解策略得到扩充。并不是所有的表的更新频度都是一致的,而且表中的数据量大小也不同。字典表一般较小,而且很少更新,可以安全的复制。在整个数据存储框架中,ORM作为独立的技术元素参与数据存储过程,通过主键提供缓存服务,产生了新的数据分布模型,提供了新的性能优化契机。
6
0
分享到:
评论

相关推荐

    ORM对象关系映射

    对象关系映射(ORM)是一种概念性的、易于理解的模型化数据的方法,基于三个核心原则:简单、传达性、精确性。ORM 方法论提供了概念性的模型化数据的方法,基于数据模型创建正确标准化了的结构。ORM 专门被设计为...

    ORM客户关系体系统

    ORM框架如NHibernate、Entity Framework等,它们允许开发者定义对象模型,然后自动生成对应的数据库表结构,并在对象和数据库之间建立映射关系。这样,当我们在代码中对对象进行操作时,ORM框架会自动处理相关的SQL...

    ORM关系映射

    总结来说,ORM关系映射是现代软件开发中的重要工具,它通过将对象模型和关系模型进行映射,实现了数据访问层的抽象,降低了开发复杂度,提高了开发效率。然而,合理选择和使用ORM框架,平衡性能和便利性,是每个...

    ORM(关系型数据库与对象映射项目)

    在本项目中,"ORM(关系型数据库与对象映射项目)"可能是实现了一个ORM框架的实例,或者是在一个具体的应用中使用ORM技术进行数据库操作。这个项目可能涵盖了以下几个方面: 1. **类库选择**:项目可能使用了某种流行...

    Hibernate框架ORM的实现原理

    **ORM**,即**对象关系映射**(Object Relational Mapping),是一种程序技术,用于将关系型数据库中的数据映射到对象上,以便于程序员能够以面向对象的方式操作数据库。这种方式极大地简化了数据库的访问,使得开发...

    ORM思想的深入学习ORM.zip

    ORM,全称Object-Relational Mapping,即对象关系映射,是一种编程技术,用于将关系数据库的数据模型映射到面向对象的软件应用中。在Java领域,Hibernate和MyBatis是两种广泛应用的ORM框架,它们极大地简化了数据库...

    ORM映射与WEB的应用

    ORM的核心思想是通过创建一个映射文件或使用注解,将数据库的表与程序中的类关联起来,每个表对应一个类,表中的字段对应类的属性。这样,当我们在程序中操作对象时,实际上是在操作数据库中的数据,反之亦然。ORM...

    基于ORM模型的物资管理系统的设计和实现

    总结来说,基于ORM模型的物资管理系统设计和实现,是利用ORM技术将数据库操作与业务逻辑解耦,提高开发效率和代码质量。通过精心设计的对象模型和选择合适的ORM框架,我们可以构建出一个高效、易用的物资管理系统,...

    cpp-SQLiteORM用于现代C的SQLiteORM库只有header

    2. **ORM(对象关系映射)**: ORM是一种编程技术,它将数据库表与类对象关联起来,使得开发人员可以像操作对象一样操作数据库。这降低了对SQL知识的依赖,提高了代码的可读性和可维护性。 3. **C++ ORM库**: C++ ...

    orm的详细解释概念

    ORM的核心思想是将对象模型(对象、类、继承、关联等)映射到关系模型(表、字段、外键等)。这样,开发者可以使用面向对象的语言(如Java)操作对象,而ORM框架负责在后台将这些操作转化为相应的SQL指令,与数据库...

    sqlite3的ORM框架

    SQLite3的ORM(Object-Relational Mapping)框架是一种在C++编程中将数据库关系模型与对象模型进行对应的技术。ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码...

    php中的orm

    10. ORM与原生SQL的混合使用场景 了解和掌握PHP中的ORM技术,对于提升PHP Web开发的效率和代码质量有着显著的帮助。通过阅读这篇博客,开发者可以学习到如何更好地利用ORM进行数据库操作,从而专注于业务逻辑的实现...

    django ORM机制的总结

    Django ORM(Object-Relational Mapping,对象关系映射)机制是Django框架中的一种强大功能,它允许开发者使用Python代码来操作数据库,实现了对象和关系数据库之间的映射。下面是Django ORM机制的概念和方法总结。 ...

    .NET ORM框架

    数据模型是实体类的定义,描述了数据库表的结构,而映射则是定义实体与数据库表之间的对应关系。 在C#.NET项目中,ORM框架的使用通常涉及以下步骤: 1. 定义数据模型:创建表示数据库表的类,包含属性来表示字段。 ...

    Orm compare

    对象关系映射(ORM)是软件工程中的一个技术,它允许开发人员使用面向对象的编程语言与关系数据库进行交互,而无需直接编写SQL语句。ORM通过创建数据模型类并将它们映射到数据库表,简化了数据库操作。 常见的ORM...

    手写orm

    【标题】:“手写ORM”指的是自己动手实现Object-Relational Mapping(对象关系映射)技术,这是一种在软件开发中将数据库操作与业务逻辑解耦的方法。ORM允许开发者使用面向对象的方式来操作数据库,无需关心底层SQL...

    Moon.Orm下载

    3. **实体设计**:定义好数据库模型的实体类,包括属性与数据库字段的对应关系,以及可能的注解,如主键、外键等。 4. **配置数据库连接**:在项目中设置数据库连接字符串,指定要使用的数据库类型。 5. **数据库...

    Grove ORM Development Toolkit

    2. **ORM框架的使用**:学习如何在项目中集成Grove ORM,创建和配置数据模型,以及如何通过对象操作数据库,如添加、更新、删除记录。 3. **查询构建与执行**:掌握Grove ORM的查询API,如何构建复杂的SQL查询并...

Global site tag (gtag.js) - Google Analytics