Qual é a diferença entre um ORM e um ODM?

157

Estou tentando descobrir qual é a diferença entre ORM e ODM, tanto quanto eu entendo o conceito, ORM (Object Relational Mapper) mapeia as relações entre dados, onde o ODM (Object Document Mapper) lida com documentos. Estou certo ao supor que o mySQL é um exemplo de ORM e o MongoDB é um exemplo de ODM?

Como tenho certeza de que você pode ver, não estou muito familiarizado com a teoria do conceito. Alguém poderia esclarecer as diferenças entre os dois?

Odyss3us
fonte

Respostas:

173

O MySQL é um exemplo de banco de dados relacional - você usaria um ORM para traduzir entre seus objetos em código e a representação relacional dos dados.

Exemplos de ORMs são nHibernate , Entity Framework , Dapper e mais ...

O MongoDB é um exemplo de banco de dados de documentos - você usaria um ODM para converter entre seus objetos em código e a representação dos dados dos documentos (se necessário).

O Mandango é um exemplo de ODM para MongoDB.

Oded
fonte
8
Você pode ter estruturas híbridas ORM / ODM, como mORMot para Delphi , Doctrine para PHP ou Hibernate OGM para Java . E alguns bancos de dados SQL têm forte suporte a documentos, por exemplo, o excelente PostgresSQL, que apresenta tipos de dados JSON ou JSONB, para que você possa misturar RDBMS e armazenamento orientado a documentos na mesma tabela, incluindo índices e consultas avançadas!
Arnaud Bouchez
Então você está dizendo que os documentos são documentos ... isso faz sentido!
HashRocketSyntax
mangusto é um ODM ou ORM?
YL
1
mangusto, mongóide são todos ODMs. Eu acho que para um noSQL só podemos ter ODMs.
precisa
28

Um ORM é mapeado entre um Modelo de Objeto e um Banco de Dados Relacional. Um ODM mapeia entre um Modelo de Objeto e um Banco de Dados de Documentos. O MySQL não é um ORM, é um Banco de Dados Relacional, mais especificamente, um Banco de Dados SQL. O MongoDB não é um ODM, é um Banco de Dados de Documentos.

Jörg W Mittag
fonte
Ótima explicação! Ainda não estou claro se ODM / ORM são camadas de abstração fornecidas pelo banco de dados subjacente ou pelas bibliotecas de drivers, ou são uma camada separada entre o driver e o banco de dados? Pode haver um driver ORM para um banco de dados de documentos e vice-versa?
quer tocar hoje
10

Essencialmente, um ORM usa um driver de banco de dados SQL como ODBC, JDBC ou OLEDB para converter a notação de objeto em notação relacional e um ODM usa uma API JSON ou JSONB para converter a notação de objeto em notação de documento.

Existem diferentes tipos de implementações sob o capô.

PS: JSONB é uma notação de documento de texto JSON armazenada em um formato binário conforme usado pelo MongoDB.

Fernando Santucci
fonte
1
tecnicamente falando, ODBC e JDBC são especificações de API que um driver implementa.
ASGs
2
Postgres também suporta JSONB
Luna Lovegood
3

Quando você aprende a trabalhar com o banco de dados, tudo se resume a dois tipos de configurações de banco de dados: ORM (Object Relation Mapping) e ODM (Object Document Mapping)

ORM, que é o mapeamento de um objeto com um mundo relacional, basicamente converte dados entre tipos incompatíveis em linguagens de programação orientadas a objetos. O ORM agrupa os detalhes específicos da implementação dos drivers de armazenamento em uma API (interface do programa de aplicativo) e mapeia os campos relacionais para os membros de um objeto. Por exemplo, se eu tiver uma tabela de funcionários, ela será mapeada para um único objeto para todos os funcionários, com vários métodos associados.

O ODM, por outro lado, é um Mapeador de Documentos de Objetos, que mapeia objetos com um Banco de Dados de Documentos como o MongoDB.

A principal diferença é que o ORM é para bancos de dados MySQL, enquanto o ODM faz o mapeamento para representação de dados dos documentos. A melhor maneira de lembrar o que o ORM faz seria pensar nele como uma planilha do Excel, com linhas e colunas. Ao usar essa configuração, você deseja ter um ótimo plano de como deseja lidar com o aplicativo atual; ele não permite tantas modificações quanto o ODM. Com o ODM, podemos adicionar novos campos e propriedades facilmente, mas com o ORM ao adicionar um novo campo, você precisa ter em mente que nada permanece vazio; portanto, é necessário que um valor seja o padrão, a menos que você queira entrar em cada um e modificar.

sajjad jafari bojd
fonte
2

O Mongoose é um bom exemplo para o ODM (Object Data Model) para MongoDB, no qual você pode executar operações diretamente com objetos e que é traduzido na consulta e no esquema apropriados. Pode ser encontrado aqui em https://mongoosejs.com/

Arjun Agarwal
fonte