web-dev-qa-db-ja.com

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

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

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

134
Odyss3us

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

ORMの例は nHibernateEntity FrameworkDapper などです...

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

Mandango は、MongoDBのODMの例です。

154
Oded

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

25
Jörg W Mittag

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

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

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

8

最初にデータベースを操作する方法を学ぶと、ORM(オブジェクトリレーションマッピング)とODM(オブジェクトドキュメントマッピング)の2種類のデータベースセットアップにすべてがなります。

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

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

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

0

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

0
Arjun Agarwal