阻抗不匹配指的是输入阻抗与输出阻抗不匹配的问题,可以造成反射。
持久化存储数据所采用的数据模型(无论是文件系统还是数据库管理系统)如果与编写程序(C++、Smalltalk、VisualBasic、Java、C#)时所采用的数据模型有差异,就称为“阻抗不匹配”问题。
“阻抗不匹配”是企业里的严重问题,高达25-33%的开发时间浪费在努力将对象挤压进关系型的持久化,也就是一般 说的对象关系映射(ORM)。虽然ORM工具的例子都着力演示其简易,但现实的情况要复杂好几个数量级,于是整个ORM的概念都没法站住脚。即便最优秀的 ORM工具也会创建出效率极低的模型,导致严重的性能问题
常用orm
hibernate
Toplink(Oracle公司的)
EJB(2.0X中有CMP;3.0X提出了一套“Java持久化API”---JPA)
IBatis

引用

第一范式:
1、内容相似的数据列必须消除(消除的办法就是再创建一个数据表来存放他们,建立关联关系)
2、必须为每一组相关数据分别创建一个表
3、每条数据记录必须用一个主键来标示

第二范式:
1、只要数据列里面的内容出现重复,就意味着应该把表拆分为多个表
2、拆分形成的表必须用外键关联起来。

第三范式:
1、与主键没有直接关系的数据列必须消除(消除的办法就是再创建一个表来存放他们)

这三大范式就像给ORM的人如何设计数据库写的指南:

引用

第一范式:
1、每个持久对象映射一张表
2、每个持久对象必须有一个主键

第二范式:
1、持久对象要有内聚性,冗余的内容拿出去,单独创建持久对象
2、持久对象之间的关系用外键关联

第三范式:
1、持久对象要有内聚性,无关的内容拿出去,单独创建持久对象

关系模型和对象模型是不是在存储概念上一致,就不用多说废话了。

说关系模型和对象模型“阻抗不匹配”,当然是有不匹配的地方,比方说对象模型当中特有的“继承”,“组合”,“聚合”,“依赖”的概念在关系模型当中是不存在的,但是这种模型的“阻抗不匹配”最终在存储模型是还是能够统一起来的,这就是ORM的作用:

1、对象的继承关系可以表达为三种不同的关系存储模型:整个继承数一张表;每个继承层次一张表;每个对象一张表

2、对象的组合和聚合可以用主外键关联的表来存储,它可以表达1:n,n:1和n:m的关系

3、对象的依赖关系和存储无关,所以不需要ORM做什么。

所以结论就是这样:

关系模型和对象模型存在概念上的阻抗不匹配,但是在关系数据库的存储模型上是一致的,无论你从关系模型的三大范式理论出发,还是从对象模型的ORM理论出发,最终一定会得到一致的数据库表设计。

Hibernate(1) 阻抗不匹配相关推荐

  1. 特征阻抗和阻抗匹配_没有诸如对象关系阻抗不匹配之类的东西

    特征阻抗和阻抗匹配 过去十年来,ORM的许多批评都错了这一点,因为它不准确. 到本文结尾,我们将得出以下结论: 关系(数据)模型和面向对象的模型之间没有显着差异 如何得出这个结论? 继续阅读! 我们如 ...

  2. 也谈系统内的阻抗不匹配

    也谈系统内的阻抗不匹配 最近在做可视化模板构件,引入的一些概念,在团队内部引起了一定的混乱.其中最主要的问题就是层次的划分以及各个层次间对象的阻抗不匹配问题.整个构架的典型分层施Templet(展现层 ...

  3. Hibernate的出现和Hinbernate的简单模拟实现

    1 概念 Hibernate是一种免费的开源的Java语言下的对象关系映射解决方案 Hibernate 有个在.NET Framework 上的实现版本,称为 NHibernate 1.1   为什么 ...

  4. 现场总线技术笔记——1、数字信号是怎么完成通信的?(匹配阻抗、CRC校验)

    文章目录 数字通信系统模型 信道 信道容量--解决传输速率的方法 如何提高传输的稳定性和准确性? ①通过编码规则提高准确性 ②同步和异步传输中的同步技术 ③阻抗匹配技术 信号的传输模式--基带.载带. ...

  5. 整合Struts2、Spring、Hibernate构建J2EE应用

    [论文摘要] J2EE即是以Java 2平台为基础的体系结构,又是一组旨在简化企业解决方案的开发.部署.运行.维护等相关复杂问题的技术规范与指南.Struts2.Spring.Hibernate是当今 ...

  6. Hibernate教程– ULTIMATE指南(PDF下载)

    编者注:在本文中,我们提供了全面的Hibernate教程. Hibernate ORM(简称Hibernate)是一个对象关系映射框架,它有助于将面向对象的域模型转换为传统的关系数据库. Hibern ...

  7. Hibernate简介

    1 hibernate概述 Hibernate是冬眠的意思,它是指动物的冬眠,但是本文讨论的Hibernate却与冬眠毫无关系,而是接下来要讨论的SSH2框架中的一员.Hibernate是一个开源的项 ...

  8. Hibernate 马士兵 学习笔记

    1.  HelloWorld a)        Xml b)        Annotction 2.  Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3 ...

  9. jpa vue管理系统_如何通过利用Java流获取类型安全和直观的Hibernate / JPA查询

    jpa vue管理系统 大部分Java数据库应用程序都在使用Hibernate / JPA来弥合Java和SQL之间的鸿沟. 直到最近,我们还被迫将Java和JPQL混合使用,或者使用复杂的命令式标准 ...

最新文章

  1. Science:AI领域那么多引人注目的「进展」,竟是无用功
  2. 定时任务 Crontab命令 详解
  3. 2015.12.11-2015.12.13 金华旅程的学习计划
  4. 保25ms争10ms——Zenlayer如何保持出海业务的超低延时
  5. 【LeetCode】1. 盛最多水的容器:C#三种解法
  6. 【渝粤题库】广东开放大学企业标准化 形成性考核
  7. cathome 猫家 开发日记-底部导航
  8. 移动端AI应用太抢手,高通这次要送开发者20万+的SUV
  9. 3dmax2020渲染器下载3dmax2020渲染器VRay4.2下载安装教程
  10. 全球地名中英文对照表(S)
  11. Effective minidump
  12. 函数的极值点、零点、驻点、拐点的理解
  13. 怎么快速把wmv视频格式转换成mp4视频
  14. 学习Spring之前要先学习什么?
  15. c语言 分数通分,如何用C语言,实现简单的分数化简
  16. 基数排序组合桶式排序
  17. Apache Hudi的编译及安装
  18. 通过python使用多种方法改变图片尺寸
  19. win10要关闭自动更新吗?看完你就有答案了
  20. s3cmd 快速评估RADOSGW的性能

热门文章

  1. Git 2.20的重大更新:侧重可用性和性能
  2. Jupyter Notebook 添加目录
  3. 2017年10月31日结束Outlook 2007与Office 365的连接
  4. 使用VS2010调用matlab的mat格式文件
  5. 受损骨骼可能在类似地球的重力条件下更快愈合
  6. Parallel Python实现程序的并行多cpu多核利用【pp模块】
  7. 双花证明已实现,BCH安全的0确认交易还远吗?
  8. Docker Swarm Mode 学习笔记(聊聊 replicas)
  9. 游戏 Github Page
  10. Docker折腾手记-linux下安装