ORMとは何ですか、どのように機能し、どのように使用する必要がありますか?[閉まっている]


230

誰かが私が設計しているプロジェクトにORMを使用することを提案しましたが、それが何であるか、またはそれがどのように機能するかについての情報を見つけるのに苦労しています。

ORMとは何か、それがどのように機能するのか、そしてどのようにORMを使い始める必要があるのか​​について誰かに簡単な説明を教えてもらえますか?


8
私はこの質問を見つけましたが、それは2009年からであり、ORMをすでに習得しているかどうかはわかりませんが、CodePlex C#(entityframework.codeplex.com)でEntity Frameworkを探します。また、これを読むことができます。(dbtechnet.org/labs/dae_lab/Orm.pdf
マクシムスDecimus

1
ORMカムはオブジェクトロールモデリング en.wikipedia.org/wiki/Object-role_modeling
O-9

1
これは有用な質問であり、トップアンサーへの投票はそれを裏付けるようです。ORMとは何かについての簡単な説明は、意見を必要としません。ユーザーが開始するためのリンクを要求したからといって、質問にはトピック外のフラグが付けられます。これはモデレーターからの頻繁な過剰反応だと思います。
NeilG

3
@NeilG閉じた質問は、質問がトピックから外れていることを意味します。回答に有用な情報が含まれている可能性がありますが、それでは質問がトピックについているわけではありません。また、削除されずにそのまま残りますが、最高の状態で機能するように、SOをクリーンでオントピックに保つ必要があります。だから、あなたの最初のコメントに答えるために:これは役に立つ質問ではありません、役に立つ答えがあります。
M

1
@NeilG問題は、質問にリソースのリクエストが含まれていることです(タイトルと質問の両方に)。このようなリクエストはトピックから外れています。これは主に、ここでの回答のいくつかで起こっているように、人々がお気に入りのリソースへのリンクを投稿するだけだからです。質問からリソースのリクエストを削除すると、既存の回答の一部が無効になります。通常のユーザーとして、質問を編集して回答を無効にすることはできません。したがって、それは閉じられるべきです。質問に回答がない場合は、編集してそれらの要求を削除し、開いたままにすることができます。
Makyen

回答:


483

前書き

オブジェクトリレーショナルマッピング(ORM)は、オブジェクト指向のパラダイムを使用して、データベースからデータを照会および操作できるようにする手法です。ORMについて話すとき、ほとんどの人はオブジェクトリレーショナルマッピング手法を実装するライブラリを参照しているため、「an ORM」というフレーズを使用します。

ORMライブラリは、選択した言語で記述された完全に通常のライブラリであり、データの操作に必要なコードをカプセル化するため、SQLを使用しなくなります。使用しているのと同じ言語のオブジェクトを直接操作します。

たとえば、これは疑似言語を使用した完全に架空のケースです。

本のクラスがあり、著者が "Linus"であるすべての本を取得したいとします。手動で、あなたはそのようなことをするでしょう:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

ORMライブラリを使用すると、次のようになります。

book_list = BookTable.query(author="Linus");

機械部品はORMライブラリを介して自動的に処理されます。

長所と短所

ORMを使用すると、次の理由により多くの時間を節約できます。

  • ドライ:データモデルを1か所だけで作成すると、コードの更新、保守、再利用が簡単になります。
  • データベースの処理からI18Nまで、多くのことが自動的に行われます
  • それはあなたにMVCを書くことを強制しますコード、それは結局、あなたのコードを少しよりきれいにします。
  • 整形式でないSQLを記述する必要はありません(SQLは「サブ」言語のように扱われますが、実際には非常に強力で複雑な言語であるため、ほとんどのWebプログラマーはそれを嫌いです)。
  • 消毒; 準備されたステートメントまたはトランザクションの使用は、メソッドを呼び出すのと同じくらい簡単です。

ORMライブラリの使用は、次の理由により、より柔軟です。

  • それはあなたの自然なコーディング方法に適合します(あなたの言語です!)。
  • DBシステムを抽象化するので、いつでも変更できます。
  • モデルは残りのアプリケーションに弱くバインドされているため、変更したり、他の場所で使用したりできます。
  • それはあなたが頭痛なしでデータ継承のようなOOPの良さを使うことを可能にします。

しかし、ORMは苦痛になる可能性があります。

  • あなたはそれを学ぶ必要があり、ORMライブラリは軽量ツールではありません。
  • あなたはそれを設定する必要があります。同じ問題。
  • 通常のクエリではパフォーマンスは問題ありませんが、SQLマスターは、大規模なプロジェクトで彼自身のSQLを使用すると常により良い結果を得ることができます。
  • DBを抽象化します。舞台裏で何が起こっているかを知っていても問題ありませんが、forループでの大ヒットのように、非常に貪欲なステートメントを書くことができる新しいプログラマーにとっては罠です。

ORMについて学ぶには?

まあ、それを使用してください。どちらのORMライブラリを選択しても、それらはすべて同じ原則を使用します。このあたりにはたくさんのORMライブラリがあります:

WebプログラミングでORMライブラリを試したい場合は、次のようなフレームワークスタック全体を使用したほうがよいでしょう。

  • symfony(PHP、PropelまたはDoctrineを使用)。
  • Django(Python、内部ORMを使用)。

何かを学ぼうとしているのでない限り、自分でORMを書こうとしないでください。これは膨大な作業であり、古いものは信頼できるようになるまでに多くの時間と作業を要しました。


50

誰でも簡単に説明してくれますか...

承知しました。

ORMは「オブジェクトからリレーショナルへのマッピング」の略です。

  • オブジェクトの一部は、あなたのプログラミング言語(この場合のpython)を使用するものです

  • リレーショナル部分はリレーショナルデータベース管理システム(あるデータベース)は、データベースの他の種類があるが、最も人気がリレーショナルである(あなたが知っている、テーブル、カラム、PK FKなどなどのOracleのMySQL、MS-SQL)

  • 最後に、マッピングパーツは、オブジェクトとテーブルの間のブリッジを行う場所です。

ORMフレームワークを使用しないアプリケーションでは、これを手動で行います。ORMフレームワークを使用すると、ソリューションの作成に必要な定型文を減らすことができます。

このオブジェクトがあるとしましょう。

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

とテーブル

   create table employee(
          name varcar(10),
          -- etc  
    )

ORMフレームワークを使用すると、そのオブジェクトをdbレコードに自動的にマッピングし、次のように記述できます。

   emp = Employee("Ryan")

   orm.save( emp )

そして、従業員にDBを挿入してもらいます。

おっと、それは簡単ではありませんでしたが、あなたが読んだ他の記事をキャッチするのに十分簡単であることを願っています。


17

ORM(Object Relational Mapper)は、コードオブジェクトをデータベースにマップするのに役立つソフトウェアの一部/レイヤーです。

他の側面よりも多くの側面を処理するものもありますが、その目的は、開発者の肩からデータレイヤーの重みの一部を取り除くことです。

これは、Martin Fowler(Data Mapper)からの短いクリップです。

エンタープライズアプリケーションアーキテクチャのデータマッパーのパターン


4

すべての頭字語と同様、あいまいですが、私はそれらがオブジェクトリレーショナルマッパーを意味していると思います。もちろん、本当ではありませんし、問題がないわけではありません。常にカラフルなJeff Atwoodは、ORM をCSのベトナムと表現しています;-)。しかし、SQLをほとんどまたはまったく知らず、かなり単純で小規模な問題がある場合は、時間を節約できます!-)


2

オブジェクトモデルは、次の3つの概念に関係しています。データ抽象化カプセル化継承リレーショナルモデルは、リレーションまたはテーブルの基本概念を使用しました。オブジェクトリレーショナルマッピング(ORマッピング)製品は、オブジェクトプログラミング言語機能をリレーショナルデータベースと統合します。

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