我试图弄清楚 ORM 和 ODM 之间的区别是什么,据我了解这个概念,ORM(对象关系映射器)映射数据之间的关系,而 ODM(对象文档映射器)处理文档。我是否正确假设 mySQL 是 ORM 的一个示例,而 MongoDB 是 ODM 的一个示例?
我相信你可以看到,我对这个概念的理论不太熟悉。有人可以澄清两者之间的区别吗?
MySQL 是关系数据库的一个示例——您将使用 ORM 在代码中的对象和数据的关系表示之间进行转换。
ORM的示例包括 nHibernate 、Entity Framework、Dapper等等……
MongoDB 是文档数据库的一个示例 - 您将使用 ODM 在代码中的对象和数据的文档表示之间进行转换(如果需要)。
Mandango是 MongoDB 的 ODM 示例。
对象模型和关系数据库之间的 ORM 映射。对象模型和文档数据库之间的 ODM 映射。MySQL 不是 ORM,它是一个关系数据库,更具体地说,是一个 SQL 数据库。MongoDB 不是 ODM,它是一个文档数据库。
本质上,ORM 使用 ODBC、JDBC 或 OLEDB 等 SQL 数据库驱动程序将对象表示法转换为关系表示法,而 ODM 使用 JSON 或 JSONB api 将对象表示法转换为文档表示法。
引擎盖下有不同类型的实现。
PS:JSONB 是一种 JSON 文本文档表示法,以 MongoDB 使用的二进制格式存储。
Mongoose 是 MongoDB 的 ODM(对象数据模型)的一个很好的示例,您可以在其中直接对对象执行操作,并将其转换为适当的查询和模式。它可以在这里找到https://mongoosejs.com/
要了解 ORM 和 ODM 之间的区别,我认为首先回顾一下关系数据库和文档数据库之间的区别会很有帮助。我会以一种挥手的方式这样做。
关系数据库是您可能习惯使用的数据库。将数据存储在表中的一种,如下所示:
关系数据库的常见示例是 MySQL、Postgres 和 SQLite。要查询关系数据库,您将使用 SQL。
文档数据库呢?好吧,对于文档数据库,数据存储在 JSON 中而不是表中。
实际上,这不是 100% 准确的。MongoDB解释:
文档将数据存储在字段值对中。这些值可以是多种类型和结构,包括字符串、数字、日期、数组或对象。文档可以以 JSON、BSON 和 XML 等格式存储。
好的,那么现在,什么是 ORM,什么是 ODM,它们如何比较?
好吧,ORM 代表......实际上,我会让这个答案解释一下:
对象关系映射 (ORM) 是一种技术,可让您使用面向对象的范例从数据库中查询和操作数据。在谈论 ORM 时,大多数人指的是实现对象关系映射技术的库,因此有“一个 ORM”这个短语。
基本上,在您的应用程序代码中,您通常处理的是对象。但是在您的数据库中,您有表。ORM 是在两者之间进行映射的库。正如维基百科解释的那样:
这实际上创建了一个可以在编程语言中使用的“虚拟对象数据库”。
这是一个例子。Active Record是 Ruby on Rails 的流行 ORM。使用 Active Record,您可以执行类似的操作User.find_by(name: 'David')
并返回类似{ id: 1, name: 'David' }
. 所以 ORM 正在为你做以下映射:
然后使用 ODM,它基本上做同样的事情,除了文档数据库。它从应用程序代码中的对象映射到数据库中的文档。Mongoose是 ODM 的一个很好的例子。它适用于 MongoDB。