Jon*_*nas 6 oop orm paradigms procedural-programming functional-programming
对象关系映射,ORM是必须在面向对象编程语言中实现并使用关系数据库的所有应用程序中解决的问题.
但是如果你使用结构来映射C中的关系数据库,问题是不一样的?函数式编程语言中的元组/记录?或者我错过了一些东西,因为我没有用C或函数式语言编写数据库应用程序.
有趣的是,至少,这种"阻抗不匹配"似乎是人们希望将关系推入对象习语的情况所特有的.
在C语言中,大多数数据库API倾向于将结果集公开为多维数组,而不是结构体.因此,人们只是以与数据库中的表中存在的格式相同的格式访问数据 - 它现在作为数据的本地副本而不是"在数据库中"存在是无关紧要的.
大多数功能性RDBMS库将数据库行公开为记录类型,它们在相当深的层次上几乎完美地对应于数据库行.在这种情况下没有"阻抗不匹配".
关于这个主题的维基百科文章似乎推测了对象范式特别容易受到这种不匹配的一些原因.
我的信念是,它基本上取决于你总是在构建数据的次要表示(即覆盖"对象")这一事实.在大多数命令式或(非对象)函数式语言中,不太可能构建数据的这种大的,语义上无关的次要表示.如果要在那个世界中建立一个次要代表,那么它更有可能是某种抽象.这与我的基本(未经证实的)信念相对应,OOP范式基本上是众所周知的锤子,使每个问题看起来像钉子.
好吧,既可以也可以.
您所指的是对象 - 关系阻抗不匹配,即在面向对象的模型和实体 - 关系模型之间传输数据的问题.困难在于在两个模型中结构化和存储信息的本质上不同的方式,其中OO是分层的而ER是表格式的.
对象关系映射是一种尝试解决对象 - 关系阻抗不匹配问题的技术.
术语对象 - 关系阻抗不匹配特定于面向对象和实体 - 关系模型.然而," 阻抗 " 一词意味着阻力或难度,因此术语" 阻抗不匹配 "可能用于表示两个不兼容的数据模型/类型系统之间的映射的一般问题.