Qual è la differenza tra un ORM e un ODM?


158

Sto cercando di capire quale sia la differenza tra ORM e ODM, per quanto ne comprendo il concetto, ORM (Object Relational Mapper) mappa le relazioni tra i dati, mentre ODM (Object Document Mapper) tratta i documenti. Ho ragione nel supporre che mySQL sia un esempio di ORM e MongoDB sia un esempio di ODM?

Come sono sicuro che puoi vedere, non ho troppa familiarità con la teoria del concetto. Qualcuno potrebbe chiarire le differenze tra i due?

Risposte:


173

MySQL è un esempio di un database relazionale: useresti un ORM per tradurre tra i tuoi oggetti nel codice e la rappresentazione relazionale dei dati.

Esempi di ORM sono NHibernate , Entity Framework , Dapper e molto altro ancora ...

MongoDB è un esempio di un database di documenti: useresti un ODM per tradurre tra i tuoi oggetti nel codice e la rappresentazione del documento dei dati (se necessario).

Mandango è un esempio di un ODM per MongoDB.


8
Puoi avere framework ORM / ODM ibridi, come mORMot per Delphi , Doctrine per PHP o Hibernate OGM per Java . E alcuni database SQL supportano fortemente i documenti, ad esempio l'eccezionale PostgresSQL che presenta tipi di dati JSON o JSONB in modo da poter combinare RDBMS e archiviazione orientata ai documenti all'interno della stessa tabella, inclusi indici e query avanzate!
Arnaud Bouchez,

Quindi stai dicendo che i documenti sono documenti ... ha senso!
HashRocketSyntax

la mangusta è un ODM o un ORM?
YL

1
mangusta, mongoide sono tutti ODM. Immagino che per un noSQL possiamo avere solo ODM.
Luna Lovegood,

29

Un ORM mappa tra un modello a oggetti e un database relazionale. Un ODM viene mappato tra un modello a oggetti e un database dei documenti. MySQL non è un ORM, è un database relazionale, più specificamente, un database SQL. MongoDB non è un ODM, è un database di documenti.


Grande spiegazione! Non sono ancora chiaro se ODM / ORM sono livelli di astrazione forniti dal database sottostante o dalle librerie dei driver o sono un livello separato tra il driver e il DB? Può esserci un driver ORM per un database di documenti e viceversa?
pooya13

10

Essenzialmente, un ORM utilizza un driver di database SQL come ODBC, JDBC o OLEDB per tradurre la notazione dell'oggetto in notazione relazionale e un ODM utilizza un API JSON o JSONB per tradurre la notazione Oggetto in notazione documento.

Ci sono diversi tipi di implementazioni sotto il cofano.

PS: JSONB è una notazione di documento di testo JSON memorizzata in un formato binario utilizzato da MongoDB.


1
tecnicamente parlando, ODBC e JDBC sono le specifiche API implementate da un driver.
data

2
Anche Postgres supporta JSONB
Luna Lovegood il

3

Quando si impara per la prima volta a lavorare con il database, tutto si riduce a due tipi di impostazioni del database che sono ORM (Object Relation Mapping) e ODM (Object Document Mapping)

ORM che consiste nel mappare un oggetto con un mondo relazionale, fondamentalmente converte i dati tra tipi incompatibili in linguaggi di programmazione orientati agli oggetti. ORM racchiude i dettagli specifici dell'implementazione dei driver di archiviazione in un'API (interfaccia del programma applicativo) e associa i campi relazionali ai membri di un oggetto. Ad esempio, se ho una tabella di dipendenti, viene mappata su un singolo oggetto per tutti i dipendenti, con vari metodi associati.

ODM d'altra parte è un Object Document Mapper, che mappa gli oggetti con un Database di documenti come MongoDB.

La differenza principale è che ORM è per i database MySQL, mentre ODM esegue il mapping per la rappresentazione dei dati dei documenti. il modo migliore per ricordare ciò che fa ORM sarebbe di pensarlo come un foglio di calcolo Excel, con righe e colonne. Quando si utilizza questa configurazione, si desidera essere sicuri di avere un ottimo piano su come si desidera affrontare l'applicazione corrente, non consente così tante modifiche come ODM. Con ODM possiamo aggiungere facilmente nuovi campi e proprietà, ma con ORM quando aggiungi un nuovo campo devi tenere presente che nulla rimane vuoto, quindi ha bisogno di un valore per essere predefinito, a meno che tu non voglia andare in ciascuno di essi e modificarlo.


2

Mongoose è un buon esempio di ODM (Object Data Model) per MongoDB in cui è possibile eseguire direttamente operazioni con oggetti e che viene tradotto nella query e nello schema appropriati. Può essere trovato qui all'indirizzo https://mongoosejs.com/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.