ORM和ODM有什么区别?


157

据我了解的概念,我试图弄清楚ORM和ODM之间的区别是什么,ORM(对象关系映射器)映射数据之间的关系,而ODM(对象文档映射器)处理文档。我假设mySQL是ORM的一个示例,而MongoDB是ODM的一个示例,我是否正确?

正如您确定的那样,我对这个概念的理论不太熟悉。有人可以澄清一下两者之间的区别吗?

Answers:


173

MySQL是关系数据库的一个示例-您将使用ORM在代码中的对象与数据的关系表示之间进行转换。

奥姆斯的例子是NHibernate的实体框架小巧玲珑更多...

MongoDB是文档数据库的示例-您将使用ODM在代码中的对象与数据的文档表示形式之间进行转换(如果需要)。

Mandango是MongoDB ODM的一个示例。


8
您可以使用混合的ORM / ODM框架,例如用于Delphi的mORMot用于PHP的Doctrine用于Java的Hibernate OGM。一些SQL数据库对文档有强大的支持,例如出色的PostgresSQL,它具有JSON或JSONB数据类型,因此您可以在同一张表中混合使用RDBMS和面向文档的存储,包括索引和高级查询!
Arnaud Bouchez 2014年

所以,您说的是文档,就是文档……很有意义!
HashRocketSyntax '18年

猫鼬是ODM还是ORM?
YL

1
猫鼬,蒙古类动物都是ODM。我想对于noSQL,我们只能有ODM。
露娜·洛夫古德

27

ORM在对象模型和关系数据库之间映射。ODM在对象模型和文档数据库之间映射。MySQL不是ORM,而是关系数据库,更具体地说是SQL数据库。MongoDB不是ODM,而是文档数据库。


很好的解释!我仍然不清楚ODM / ORM是底层数据库或驱动程序库提供的抽象层,还是驱动程序和DB之间的单独层?是否可以有用于文档数据库的ORM驱动程序,反之亦然?
pooya13

10

本质上,ORM使用SQL数据库驱动程序(如ODBC,JDBC或OLEDB)将对象表示法转换为关系表示法,而ODM使用JSON或JSONB api将对象表示法转换为文档表示法。

引擎盖下有不同类型的实现。

PS:JSONB是一种MongoDB使用的以二进制格式存储的JSON文本文档符号。


1
从技术上讲,ODBC和JDBC是驱动程序实现的API规范。
ass 2002年

2
Postgres也支持JSONB
Luna Lovegood

3

当您首次学习如何使用数据库时,所有这些都归结为两种数据库设置类型,即ORM(对象关系映射)和ODM(对象文档映射)。

ORM用来映射具有关系世界的对象,它基本上在面向对象的编程语言中在不兼容类型之间转换数据。ORM将存储驱动程序的实现特定细节包装在API(应用程序接口)中,并将关系字段映射到对象成员。例如,如果我有一个雇员表,它会通过各种方法映射到所有雇员的单个对象。

另一方面,ODM是对象文档映射器,它使用文档数据库(如MongoDB)映射对象。

主要区别在于ORM用于MySQL数据库,而ODM则用于数据文档表示的映射。记住ORM的最佳方法是将其视为具有行和列的Excel电子表格。使用此设置时,您要确保对如何处理当前应用程序有一个很好的计划,它不允许像ODM那样进行许多修改。使用ODM,我们可以轻松地添加新的字段和属性,但是使用ORM时,添加新字段时,您需要记住,没有什么是空的,因此除非您想进入每个字段并进行修改,否则它都需要一个默认值。


2

Mongoose是用于MongoDB的ODM(对象数据模型)的一个很好的例子,在其中您可以直接对对象执行操作,然后将其转换为适当的查询和模式。可以在这里https://mongoosejs.com/找到

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.