ORM (Object Relational Mapper) はデータ間の関係をマッピングし、ODM (Object Document Mapper) はドキュメントを扱います。mySQL が ORM の例であり、MongoDB が ODM の例であると想定するのは正しいですか?
ご覧のとおり、私は概念の理論にあまり詳しくありません。誰かが2つの違いを明確にしてもらえますか?
MySQL はリレーショナル データベースの一例です。ORM を使用して、コード内のオブジェクトとデータのリレーショナル表現を変換します。
ORMの例は、nHibernate、Entity Framework、Dapperなどです...
MongoDB はドキュメント データベースの例です。ODM を使用して、コード内のオブジェクトとデータのドキュメント表現を変換します (必要な場合)。
Mandangoは、MongoDB の ODM の例です。
ORM は、オブジェクト モデルとリレーショナル データベースの間をマップします。ODM は、オブジェクト モデルとドキュメント データベースの間をマップします。MySQL は ORM ではなく、リレーショナル データベース、より具体的には SQL データベースです。MongoDB は ODM ではなく、ドキュメント データベースです。
基本的に、ORM は ODBC、JDBC、OLEDB などの SQL データベース ドライバーを使用してオブジェクト表記をリレーショナル表記に変換し、ODM は JSON または JSONB API を使用してオブジェクト表記をドキュメント表記に変換します。
内部にはさまざまな種類の実装があります。
PS: JSONB は、MongoDB で使用されるバイナリ形式で保存される JSON テキスト ドキュメント表記です。
ORM と ODM の違いを理解するには、まずリレーショナル データベースとドキュメント データベースの違いを確認することをお勧めします。私は手を振る方法でそうします。
リレーショナル データベースは、おそらく使い慣れたデータベースです。次のように、データをテーブルに格納するもの:
リレーショナル データベースの一般的な例は、MySQL、Postgres、および SQLite です。リレーショナル データベースにクエリを実行するには、SQL を使用します。
文書データベースはどうですか? ドキュメント データベースでは、データはテーブルではなく JSON に格納されます。
実際、それは 100% 正確ではありません。MongoDB の説明:
ドキュメントは、フィールドと値のペアでデータを保存します。値は、文字列、数値、日付、配列、オブジェクトなど、さまざまな型と構造にすることができます。ドキュメントは、JSON、BSON、XML などの形式で保存できます。
さて、ORM とは何ですか、ODM とは何ですか、そしてそれらはどのように比較されるのでしょうか?
まあ、ORMは...の略です...実際、この答えを説明しましょう:
オブジェクト リレーショナル マッピング (ORM) は、オブジェクト指向のパラダイムを使用して、データベースからデータをクエリおよび操作できるようにする手法です。ORM について話すとき、ほとんどの人はオブジェクト リレーショナル マッピング手法を実装するライブラリを参照しているため、「ORM」という言葉が使われています。
基本的に、アプリケーション コードでは通常、オブジェクトを扱います。しかし、データベースにはテーブルがあります。ORM は、この 2 つをマッピングするライブラリです。ウィキペディアが説明しているように:
これにより、事実上、プログラミング言語内から使用できる「仮想オブジェクト データベース」が作成されます。
ここに例があります。Active Recordは、Ruby on Rails の一般的な ORM です。Active Record を使用すると、 のような操作を行って、 のようなUser.find_by(name: 'David')
操作を返すことができます{ id: 1, name: 'David' }
。したがって、ORM は次のマッピングを行っています。
そして、ODM を使用すると、ドキュメント データベースを除いて、基本的に同じことを行います。これは、アプリケーション コード内のオブジェクトからデータベース内のドキュメントへのマッピングです。Mongooseは ODM の良い例です。MongoDB で動作します。