オブジェクト関係マッピング

オブジェクト関係マッピング(ORM)とは



オブジェクト関係マッピング(Object-Relational Mapping, ORM)は、オブジェクト指向プログラミング言語と関係データベースの間で、データの不整合を解消するためのプログラミング技術です。オブジェクト指向プログラミングでは、複雑なデータ構造を持つオブジェクトを扱いますが、関係データベースはスカラー値のみを扱います。このため、オブジェクトをデータベースに保存したり、データベースから読み込んだりする際に、データ形式の変換が必要になります。ORMは、この変換を自動化し、開発者がデータアクセス層を意識することなく、オブジェクト指向の概念でデータ操作を行えるようにします。

背景



オブジェクト指向プログラミングでは、データはオブジェクトとして表現され、それぞれのオブジェクトは属性とメソッドを持ちます。例えば、「人物オブジェクト」は、名前、電話番号リスト、住所リストなどの属性を持つことができます。一方、関係データベースは、データを表形式で格納し、各列はスカラー値を持ちます。この違いが、オブジェクト指向プログラミングと関係データベース間のデータ不整合問題を引き起こします。

この問題を解決するために、開発者は、オブジェクトをデータベースに保存可能な形式に変換するか、プログラムをデータベースに合わせて単純な値だけを扱うようにする必要があります。ORMは、前者、すなわちオブジェクトをデータベースに保存可能な形式に変換し、その関係性を保持する方法を提供します。これにより、開発者は、データベースの構造を意識することなく、オブジェクト指向の概念でデータ操作を行うことが可能になります。

実装



ORMの実装は、オブジェクトとデータベースの表を対応付け、必要なSQLクエリを自動生成することで行われます。例えば、「人物オブジェクト」をデータベースに保存する場合、ORMは、人物の属性に対応する表にデータを挿入するSQL文を生成します。また、「人物オブジェクト」の電話番号リストを取得する場合は、ORMは、関連する電話番号表からデータを取得し、電話番号オブジェクトのリストに変換します。ORMは、これらの変換を自動的に行うことで、開発者の負担を軽減します。

ORMの実装を支援するために、多くのライブラリやフレームワークが提供されています。これらのツールは、マッピングを自動化し、開発者がよりビジネスロジックに集中できるようにします。しかし、ORMは完全に透過的ではありません。特に、複雑なクエリを処理する場合や、大量のデータを扱う場合、ORMが生成するSQLが非効率になることがあります。そのため、ORMの仕組みを理解し、必要に応じてSQLを最適化することが重要です。

様々なORMシステム



様々なORMシステムが開発されており、それぞれ特徴があります。

NeXT Enterprise Objects Framework (EOF): かつてNeXT社で開発されたORMフレームワークで、後にAppleに買収され、macOSのCore DataやWebObjectsに統合されました。現在はオープンソースのApache Cayenneに影響を与えています。
Java Data Objects (JDO): Java向けのORMの標準規格で、複数のベンダーが実装を提供しています。EJB3とも競合関係にありましたが、現在ではHibernateなどのフレームワークが主流になっています。
Hibernate: Javaで広く利用されているORMフレームワークで、JPA(Java Persistence API)に準拠しています。柔軟な設定が可能で、多様なデータベースに対応しています。
Active Record: Ruby on Railsで採用されているデザインパターンで、データベースのテーブルとオブジェクトをマッピングします。簡単な設定で、迅速な開発を可能にします。
* DBIx::Class: PerlのCatalystフレームワークで利用されるORMモジュールで、Active Recordと同様の役割を果たします。

SQLデータベースとORM



Cachéなどのデータベースは、SQL以外の方法でデータにアクセスできます。そのため、ORMは不要です。また、オブジェクトデータベースは、オブジェクトをそのまま格納できるため、SQLによる変換が不要です。しかし、オブジェクトデータベースは広く利用されていません。これは、関係データベースからオブジェクトデータベースへの移行コストや、SQLによるクエリの利便性が失われるためです。

批評



ORMは、オブジェクト指向と関係モデルの不整合という根本的な問題に対する対症療法に過ぎないという批判もあります。オブジェクト指向モデルはデータ操作には不十分であり、パラダイム全体に問題があるという指摘もあります。また、現在のORMのマッピングが間違っており、型とオブジェクトを対応させるべきという意見もあります。

まとめ



ORMは、オブジェクト指向プログラミングと関係データベース間のデータ不整合を解消する便利な技術ですが、完全に透過的ではありません。ORMを最大限に活用するためには、その仕組みを理解し、適切な設定を行う必要があります。また、データベースのパフォーマンスを考慮し、必要に応じてSQLを最適化することも重要です。

ORMの利用は、開発効率を向上させ、データアクセス層を抽象化する上で有用ですが、その限界も理解しておくことが大切です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。