オブジェクトリレーショナルマッピング

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスのオブジェクトリレーショナルマッピングORMO / RM、およびO / Rマッピングツールは、オブジェクト指向プログラミング言語を使用して、互換性のないタイプのシステム間でデータを変換するためのプログラミング手法です。これにより、事実上、プログラミング言語内から使用できる「仮想オブジェクトデータベース」が作成されます。一部のプログラマーは独自のORMツールを構築することを選択しますが、オブジェクトリレーショナルマッピングを実行する無料パッケージと商用パッケージの両方が利用可能です。

オブジェクト指向プログラミングではデータ管理タスクは、ほとんどの場合非スカラー値であるオブジェクトに作用します。たとえば、0人以上の電話番号と0個以上の住所を持つ1人の人物を表す名簿エントリについて考えてみます。これは、属性/フィールドを持つ「Personオブジェクトによるオブジェクト指向の実装でモデル化できます。エントリに含まれる各データ項目(個人の名前、電話番号のリスト、および住所のリスト)を保持します。電話番号のリスト自体には、「PhoneNumberオブジェクト」などが含まれます。このような各アドレス帳エントリは、プログラミング言語によって単一のオブジェクトとして扱われます(たとえば、オブジェクトへのポインタを含む単一の変数によって参照できます)。優先電話番号や自宅の住所などを返すメソッドなど、さまざまなメソッドをオブジェクトに関連付けることができます。

対照的に、SQL データベース管理システム(DBMS)などの多くの一般的なデータベース製品はオブジェクト指向ではなく、テーブル内に編成された整数や文字列などのスカラー値のみを格納および操作できますプログラマーは、オブジェクト値をデータベースに格納するためのより単純な値のグループに変換する(そして、取得時にそれらを元に戻す)か、プログラム内で単純なスカラー値のみを使用する必要があります。オブジェクトリレーショナルマッピングは、最初のアプローチを実装します。[1]

問題の核心は、オブジェクトの論理表現を、必要なときにオブジェクトとして再ロードできるように、オブジェクトのプロパティとそれらの関係を保持しながらデータベースに格納できるアトマイズされた形式に変換することです。このストレージおよび取得機能が実装されている場合、オブジェクトは永続的であると言われます[1]

概要

ストレージドライバーの実装固有の詳細は、通常、使用中のプログラミング言語のAPIにラップされ、周囲のコードのパラダイムに沿った、よりシンプルな方法でストレージメディアと対話するメソッドを公開します。

以下は、データベースエンジンを使用して SQLで記述されたクエリを実行するための、 C#コードで記述された簡単な例です。

var  sql  =  "SELECT id、first_name、last_name、phone、birth_date、sex、age FROM people WHERE id = 10" ; 
var  result  =  context FromSqlRaw sql )。ToList (); 
var  name  =  result [ 0 ] [ "first_name" ];

対照的に、以下はORMジョブAPIを利用しており、言語の機能を自然に利用するコードを記述できます。

var  person  =  repository GetPerson 10 ); 
var  firstName  =  person GetFirstName ();

上記のケースでは、ストレージリポジトリを表すオブジェクトとそのオブジェクトのメソッドを使用しています。他のフレームワークは、以下のように静的メソッドとしてコードを提供する場合がありますが、さらに他のメソッドはオブジェクト指向システムをまったく実装しない場合があります。多くの場合、パラダイムの選択は、ORMを周囲の言語の設計原則に最もよく適合させるために行われます。

var  person  =  Person Get 10 );

通常、フレームワークはいくつかのフィルタリングおよびクエリ機能を公開し、ストレージベースのサブセットにアクセスして変更できるようにします。以下のコードは、ID値が「10」であるデータベース内の人々を照会します。

var  person  =  Person Get Person。Properties。Id == 10 ; _ _ _  

従来のデータアクセス手法との比較

オブジェクト指向言語とリレーショナルデータベース間の従来の交換手法と比較して、ORMは多くの場合、作成する必要のあるコードの量を削減します。[2]

ORMツールの欠点は、一般に、実装コードで実際に起こっていることを曖昧にする高レベルの抽象化に起因します。また、ORMソフトウェアへの大きな依存は、不十分に設計されたデータベースを作成する主な要因として挙げられています。[3]

オブジェクト指向データベース

もう1つのアプローチは、オブジェクト指向データベース管理システム(OODBMS)、またはデータモデリングの柔軟性を高めるネイティブXMLデータベースなどのドキュメント指向データベースを使用することです。OODBMSは、オブジェクト指向の値を操作するために特別に設計されたデータベースです。OODBMSを使用すると、データが元のオブジェクト表現で格納され、結合テーブル/操作を必要とせずに関係が直接表現されるため、SQLフォームとの間でデータを変換する必要がなくなります。ドキュメント指向データベースのORMに相当するものは、オブジェクトドキュメントマッパー(ODM)と呼ばれます。

ドキュメント指向データベースは、ユーザーがオブジェクトをテーブル行に「細断」する必要もありません。これらのシステムの多くは、データセットを取得する ためのXQueryクエリ言語もサポートしています。

オブジェクト指向データベースは、複雑でニッチなアプリケーションで使用される傾向があります。OODBMSの使用に反対する議論の1つは、アドホックでアプリケーションに依存しないクエリを実行できない可能性があるということです。[要出典]このため、ほとんどのオブジェクト指向データベースは限られた範囲でSQLクエリを処理できますが、多くのプログラマーはオブジェクトSQLマッピングシステムに慣れています。他のOODBMSは、既知のクエリパターンを維持しながら、アドホッククエリの必要性に対処する手段として、SQLデータベースへのレプリケーションを提供します。[要出典]

課題

オブジェクトシステムをリレーショナルデータベースに一致させる方法を検討する場合、さまざまな問題が発生します。これらの問題は、オブジェクトと相対インピーダンスの不一致と呼ばれます。[4]

ORMを実装する代わりに、すべての主要なデータベースで提供されているネイティブの手続き型言語を使用することもできます。これらは、SQLステートメントを使用してクライアントから呼び出すことができます。データアクセスオブジェクト(DAO)デザインパターンは、これらのステートメントを抽象化し、アプリケーションの残りの部分に軽量のオブジェクト指向インターフェイスを提供するために使用されます。[5]

も参照してください

参照

  1. ^ a b 「オブジェクト/リレーショナルマッピングとは何ですか?」Hibernateの概要JBOSSHibernate 2022年1月27日取得
  2. ^ Douglas Barry、Torsten Stanienda、「Java Object Storageの問題の解決」、Computer、vol。31、いいえ。11、pp。33-40、1998年11月、 http: //www2.computer.org/portal/web/csdl/doi/10.1109/2.730734、http //www.service-architecture.com/object-からの抜粋Relational-mapping / articles/transparent_persistence_vs_jdbc_call-level_interface.htmlO / Rを使用するコード行は、コールレベルインターフェイス(1:4)に必要な行のほんの一部です。この演習では、JDBCを使用した1,923行のコードと比較して、ODMGJavaバインディングを使用した場合は496行のコードが必要でした。
  3. ^ Josh Berkus、「Wrecking Your Database」、コンピューター、2009年8月、 https: //www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
  4. ^ オブジェクトリレーショナルマッピングの再検討-O/Rマッピング戦略に対するデータベーステクノロジーの影響に関する定量的研究。M Lorenz、JP Rudolph、G Hesse、M Uflacker、HPlattner。システムサイエンスに関するハワイ国際会議(HICSS)、4877-4886(DOI:10.24251 / hicss.2017.592)
  5. ^ Feuerstein、Steven; ビル・プリビル(1997年9月)。「OraclePL/SQLプログラミング」18.5永続オブジェクトの変更2011年8月23日取得{{cite web}}: CS1 maint: location (link)

外部リンク