ORMとODMの違いは何ですか?


157

ORM(ODM(Object Document Mapper)がドキュメントを扱う)の概念を理解している限り、ORM(ODM(Object Relational Mapper))がデータ間の関係をマッピングする限り、ORMとODMの違いを理解しようとしています。mySQLはORMの例であり、MongoDBはODMの例であると私は思いますか?

私はあなたが見ることができると確信しているように、私は概念の理論にあまり詳しくありません。誰かが2つの違いを明確にしてくれませんか?

回答:


173

MySQLはリレーショナルデータベースの例です。ORMを使用して、コード内のオブジェクトとデータのリレーショナル表現を変換します。

ORMの例としては、nHibernateEntity FrameworkDapperなどがあります。

MongoDBはドキュメントデータベースの例です。ODMを使用して、コード内のオブジェクトとデータのドキュメント表現(必要な場合)を変換します。

MandangoはMongoDBのODMの例です。


8
DelphiのmORMot 、PHPのDoctrine 、JavaのHibernate OGMなど、ハイブリッドORM / ODMフレームワークを使用できます。また、一部のSQLデータベースはドキュメントを強力にサポートしています。たとえば、JSONまたはJSONBデータ型を備えた優れたPostgresSQLを使用すると、RDBMSとドキュメント指向のストレージを同じテーブル内で混合できます(インデックスや高度なクエリを含む)。
Arnaud Bouchez 2014

つまり、ドキュメントはドキュメントであるということです...それは理にかなっています!
HashRocketSyntax 2018年

マングースはODMまたはORMですか?
YL 2018

1
mongoose、mongoidはすべてODMです。noSQLの場合、ODMしか持てないと思います。
Luna Lovegood 2018年

27

ORMは、オブジェクトモデルとリレーショナルデータベースの間をマッピングします。ODMは、オブジェクトモデルとドキュメントデータベースをマッピングします。MySQLはORMではなく、リレーショナルデータベース、より具体的にはSQLデータベースです。MongoDBはODMではなく、ドキュメントデータベースです。


素晴らしい説明!ODM / ORMが、基礎となるデータベースまたはドライバーライブラリによって提供される抽象化レイヤーであるか、それともドライバーとDBの間の別個のレイヤーであるかはまだわかりません。ドキュメントデータベース用のORMドライバーはありますか?
pooya13

10

本質的に、ORMはODBC、JDBC、OLEDBなどのSQLデータベースドライバーを使用してオブジェクト表記をリレーショナル表記に変換し、ODMはJSONまたはJSONB APIを使用してオブジェクト表記をドキュメント表記に変換します。

内部にはさまざまな種類の実装があります。

PS:JSONBは、MongoDBで使用されるバイナリ形式で保存されたJSONテキストドキュメント表記です。


1
技術的には、ODBCとJDBCは、ドライバーが実装するAPI仕様です。
asgs

2
PostgresもJSONBをサポートしています
Luna

3

データベースの操作方法を初めて学ぶとき、それはすべて、ORM(オブジェクト関係マッピング)とODM(オブジェクトドキュメントマッピング)の2種類のデータベース設定に分類されます。

オブジェクトをリレーショナルな世界にマップするORMは、基本的に、オブジェクト指向プログラミング言語の互換性のない型の間でデータを変換します。ORMは、ストレージドライバーの実装固有の詳細をAPI(アプリケーションプログラムインターフェイス)でラップし、リレーショナルフィールドをオブジェクトメンバーにマップします。たとえば、従業員のテーブルがある場合、さまざまなメソッドが関連付けられた、すべての従業員の単一のオブジェクトにマップされます。

一方、ODMはオブジェクトドキュメントマッパーで、MongoDBなどのドキュメントデータベースにオブジェクトをマッピングします。

主な違いは、ORMがMySQLデータベース用であるのに対し、ODMはデータのドキュメント表現のマッピングを行うということです。ORMが何をするかを覚える最良の方法は、それを行と列を含むExcelスプレッドシートと考えることです。この設定を使用する場合は、現在のアプリケーションにどのように取り組むかについての優れた計画があることを確認する必要があります。ODMのように多くの変更を行うことはできません。ODMを使用すると、新しいフィールドとプロパティを簡単に追加できますが、ORMを使用して新しいフィールドを追加するときは、何も空のままではないため、それぞれに移動して変更しない限り、値をデフォルトにする必要があることに注意してください。


2

Mongooseは、MongoDBのODM(Object Data Model)の良い例であり、オブジェクトを使用して直接操作を実行でき、適切なクエリとスキーマに変換されます。それはでここに見つけることができますhttps://mongoosejs.com/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.