Quelle est la différence entre un ORM et un ODM?

158

J'essaie de comprendre quelle est la différence entre ORM et ODM, pour autant que je comprends le concept, ORM (Object Relational Mapper) cartographie les relations entre les données, alors que ODM (Object Document Mapper) traite des documents. Ai-je raison de supposer que mySQL est un exemple d'ORM et MongoDB est un exemple d'ODM?

Comme je suis sûr que vous pouvez le voir, je ne suis pas trop familier avec la théorie du concept. Quelqu'un pourrait-il clarifier les différences entre les deux?

Odyss3us
la source

Réponses:

173

MySQL est un exemple de base de données relationnelle - vous utiliseriez un ORM pour traduire entre vos objets dans le code et la représentation relationnelle des données.

Des exemples d'ORM sont nHibernate , Entity Framework , Dapper et plus ...

MongoDB est un exemple de base de données de documents - vous utiliseriez un ODM pour traduire entre vos objets dans le code et la représentation documentaire des données (si nécessaire).

Mandango est un exemple d'ODM pour MongoDB.

Oded
la source
8
Vous pouvez avoir des frameworks hybrides ORM / ODM, comme mORMot pour Delphi , Doctrine pour PHP ou Hibernate OGM pour Java . Et certaines bases de données SQL ont un support solide pour les documents, par exemple le grand PostgresSQL qui propose des types de données JSON ou JSONB afin que vous puissiez mélanger le SGBDR et le stockage orienté document dans la même table, y compris les index et les requêtes avancées!
Arnaud Bouchez le
Vous dites donc que les documents sont des documents ... ça a du sens!
HashRocketSyntax
la mangouste est un ODM ou un ORM?
YL
1
mangouste, mongoïde sont tous des ODM. Je suppose que pour un noSQL, nous ne pouvons avoir que des ODM.
Luna Lovegood
29

Un ORM mappe entre un modèle objet et une base de données relationnelle. Un ODM mappe entre un modèle objet et une base de données de documents. MySQL n'est pas un ORM, c'est une base de données relationnelle, plus précisément une base de données SQL. MongoDB n'est pas un ODM, c'est une base de données de documents.

Jörg W Mittag
la source
Excellente explication! Je ne suis toujours pas clair si ODM / ORM sont des couches d'abstraction fournies par la base de données sous-jacente ou par les bibliothèques de pilotes, ou sont-elles une couche distincte entre le pilote et la base de données? Peut-il y avoir un pilote ORM pour une base de données de documents et vice versa?
pooya13
10

Essentiellement, un ORM utilise un pilote de base de données SQL comme ODBC, JDBC ou OLEDB pour traduire la notation d'objet en notation relationnelle et un ODM utilise une API JSON ou JSONB pour traduire la notation d'objet en notation de document.

Il existe différents types d'implémentations sous le capot.

PS: JSONB est une notation de document texte JSON stockée dans un format binaire tel qu'utilisé par MongoDB.

Fernando Santucci
la source
1
techniquement parlant, ODBC et JDBC sont des spécifications d'API implémentées par un pilote.
asgs
2
Postgres soutient également JSONB
Luna Lovegood
2

Mongoose est un bon exemple d'ODM (Object Data Model) pour MongoDB dans lequel vous pouvez effectuer directement des opérations avec des objets et qui est traduit dans la requête et le schéma appropriés. Il peut être trouvé ici à https://mongoosejs.com/

Arjun Agarwal
la source