博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate(1) 阻抗不匹配
阅读量:6910 次
发布时间:2019-06-27

本文共 1163 字,大约阅读时间需要 3 分钟。

阻抗不匹配指的是
输入阻抗与输出阻抗不匹配的问题,可以造成反射
持久化存储数据所采用的数据模型(无论是文件系统还是 )如果与编写程序(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理论出发,最终一定会得到一致的数据库表设计。

 

转载于:https://www.cnblogs.com/royi123/archive/2013/05/31/3111636.html

你可能感兴趣的文章
基于Http原理实现Android的图片上传和表单提交
查看>>
解读大数据世界中MapReduce的前世今生
查看>>
【转】TCP为什么是个可靠的协议
查看>>
Word组件Spire.Doc6.0.52 发布| 修复转PDF文本重叠的问题
查看>>
我的友情链接
查看>>
程序员是吃青春饭的?
查看>>
错误:docker-ce conflicts with 2:docker-1.13.1-74.git
查看>>
JDK并发包之LinkedBlockingQueue
查看>>
响应式设计(Response Web Design)实践
查看>>
喜迎2015年新年:坦克大战(Robocode)游戏编程比赛图文总结
查看>>
ASP.NET MVC 5 - 给数据模型添加校验器
查看>>
矩表 - 现代数据分析中必不可少的报表工具
查看>>
Ansible 一键配置安装Keepalived+Nginx作为前端,httpd+php作为后端
查看>>
服务器维护安全策略方案
查看>>
maven-assembly-plugin 的includeBaseDirectory研究
查看>>
SSL证书相关技巧 -- 如何访问一个网站,其证书不在系统证书列表中
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
【hadoop】17.MapReduce-wordcount案例
查看>>
MyBatis标签
查看>>